Application.Workbooks.Worksheets()
の書き込みポイントは誰か説明できますか?Workbooks.Worksheets()
の代わりにApplication
を省略してもかまいませんか?ワークブックのプレフィックスとして使用しているVBAアプリケーションワード
Workbooks
オブジェクトに追加の制限はありますか?
Application.Workbooks.Worksheets()
の書き込みポイントは誰か説明できますか?Workbooks.Worksheets()
の代わりにApplication
を省略してもかまいませんか?ワークブックのプレフィックスとして使用しているVBAアプリケーションワード
Workbooks
オブジェクトに追加の制限はありますか?
短い回答:なし。
長い回答:それは依存しています。
Workbooks
を完全に修飾すると、を参照していると完全に明確になります。 Workbooks
というクラスモジュール(PredeclaredId=True
属性)がある場合は、修飾されていないWorkbooks
がそのクラスモジュールを参照し、そのクラスモジュールにWorkbook
オブジェクトを返したItem
デフォルトのインデクサープロパティがない場合、実際にはコンパイルからこのコードを防ぐ:
Debug.Print Workbooks(1).Worksheets(1).Name
あなたがWorkbooks
という名前のクラスモジュールを持っていない場合は、VBAはApplication.Workbooks
に上記解決します。
ので、この場合では、それは問題ではありません。
それは必ずしもそうではない - の例として、このコードを取る:
Application.ActiveSheet.Range
に言及だ Range("F12") = 42
、それは後端であなたをかむことができます。非修飾のRange
関数は、プログラマが何のシートを仮定しているかのために、識別不能なバグのソースです。ActiveSheet
です。
Cells(2, 2) = 42
ここに同じです。 Range
とCells
の非修飾の使用は、アクティブシートへの暗黙の参照であり、それらはペストです。それらを避けてください。それらを使用するコードは、通常、Select
とActivate
の機能も備えています。災害のためのレシピであり、マクロレコーディングされたコードはキャンディーのようにそれを使用するため、初心者の多くは「正しい方法」だと考えています。
アクティブシートへの暗黙的な参照を避け、アクティブブックへの暗黙的な参照を避けます。アクティブなアプリケーションへの暗黙的な参照は、おそらく問題ありません。ちょっとちょっとちょっと怠惰だけど、大丈夫。
このような網羅的な答えをありがとうございました。それは素晴らしいです。多くを学んだ。 – Oliver
「アプリケーション」はオプションであり、通常はコードに影響を与えずに省略されます。 –