私はあなたのアドバイスに感謝したいので、私は最も精通したVBAコーダーではありません!私は、これらの各モジュールが1つのワークブック(Master.xlsm)にアクセスする必要がある複数のモジュールを持っています。 1)他のモジュールでこのワークブックにアクセスするために公開変数を使用するか、2)それを使用する各サブで開くことがより速いのですか?MS Excel VBA:パブリック変数またはサブ変数間で変数を使用する方が速いのですか?
オプション#1
私は、パブリック変数にワークブックを設定すると、ブックがのAuto_Openを使用して開かれるたびに、それが割り当てられなければならないと思います。
Public wbk_MASTER As Workbook
Sub Auto_Open()
Set wbk_MASTER = Workbooks.Open("C:\Master.xlsm")
End Sub
オプション#2
また、Master.xlsmを使用する各サブで、私はちょうどそれが好き渡したい:
Sub DoSomething(wbk_master as Workbook)
' do something
End Sub
どんなサブはこのサブを呼び出すことを前提としてい次のようになります:
Sub CallDoSomething()
Dim wbk_master as Workbook
Set wbk_master = Workbooks.Open("C:\Master.xlsm")
Call DoSomething(wbk_master)
End Sub
DoSomethingのようなサブ。違いがある場合は、Master.xlsmの重要なシートの変数と、特定の範囲の値も含めたいと思います。
は個人的に、私はオプション#1がきれいですが、より高速であると思いますか?あなたが見ているのは何
が実際のオブジェクトへの単なるポインタです:直接答え与えること
これは、オプション2がそれを行うための良い方法で、できるだけ小さな範囲を維持するためのベストプラクティスです。スピードが目立つ違いはありません – SWa
複数のサブシステムでマスターを使用する必要がある場合は、1回開いて設定し、開いたままにして、必要なときにデータにアクセスする方がよいと思います。私は#1に投票する。 publicスコープを使用すると、後でオブジェクトにアクセスできるようになります。私もSWaに同意しますが、ベストプラクティスは推奨事項であり、「すべてに合った」ソリューションではありません。おそらく#1はあなたのxlsmにもっと多くのメモリを割り当てるでしょうが、このような観点からは、開いたり閉じたりする時間が少なくなるので、プロセッサ時間も短縮されます。 –
オプション1でVBAキャリアを開始しましたが、クラスが発展するにつれてコードページが小説になり、プロジェクトが巨大になり、オプション2のように変数をルーチンに渡す方がはるかに優れていました。主に私はどのようなワークブックをルーチンに渡すことができ、オープン時に多数のワークブックを開いて定義する必要がないからです。ちょうど追跡しやすいと感じる。 – jamheadart