2016-03-29 3 views
1

Application.Workbooks.Worksheets()の書き込みポイントは誰か説明できますか?Workbooks.Worksheets()の代わりにApplicationを省略してもかまいませんか?ワークブックのプレフィックスとして使用しているVBAアプリケーションワード

Workbooksオブジェクトに追加の制限はありますか?

+1

「アプリケーション」はオプションであり、通常はコードに影響を与えずに省略されます。 –

答えて

1

短い回答:なし。

長い回答:それは依存しています。

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 

ここに同じです。 RangeCellsの非修飾の使用は、アクティブシートへの暗黙の参照であり、それらはペストです。それらを避けてください。それらを使用するコードは、通常、SelectActivateの機能も備えています。災害のためのレシピであり、マクロレコーディングされたコードはキャンディーのようにそれを使用するため、初心者の多くは「正しい方法」だと考えています。

アクティブシートへの暗黙的な参照を避け、アクティブブックへの暗黙的な参照を避けます。アクティブなアプリケーションへの暗黙的な参照は、おそらく問題ありません。ちょっとちょっとちょっと怠惰だけど、大丈夫。

+0

このような網羅的な答えをありがとうございました。それは素晴らしいです。多くを学んだ。 – Oliver

関連する問題