2016-11-04 4 views
0

私はいつも自分のコードを最適に書いていきたいと思います。私は周りを見回したが、正確に私の質問を見つけることはなかった。VBAメモリ使用:異なるサブシステムと同じ変数をモジュール内で公開すると宣言します

新しいExcel/vbaプロジェクトを開始するときに通常作成するワークブックには、いくつかのワークシートがあります。それらは "LIBRARY"や "DATA"のようなものかもしれません。各サブの開始時に、私は次のように宣言します:

Dim libWS as Worksheet 
Dim dataWS as Worksheet 
Set libWS = Worksheets("LIBARARY") 
Set dataWS = Worksheets("DATA") 

私はこれらのワークシートを利用する各サブシステムでこれを行います。私の質問は、それがより最適であるか、モジュールで公にそれらのワークシートを宣言し、それらを初期化するためにワークブックのオープンマクロを使用するだけで同じでしょうか。

モジュール1:

public libWS as Worksheet 
public dataWS as Worksheet 

このワークブック:両方の速度/メモリ使用量の面で

Private Sub Workbook_Open() 
    Set libWS = Worksheets("LIBARARY") 
    Set dataWS = Worksheets("DATA") 
End Sub 

最適意味。

おかげ

+0

私は疑問が良い務めだと思いますコードレビューで十分な応答が得られるように完全なコードを投稿してみてください。 –

+0

私は少なくとも2つの理由からそれをしません:(1)グローバル変数! (2)未処理のエラーがVBプロジェクトのリセットを終了すると、グローバルがワイプされ、残りのコードが爆発します。たぶん代わりに、 "設定"オブジェクトを返す単一の関数(各シートのフィールドを持つ)を作成し、よくアクセスするアイテムを扱う必要があるときはいつでも呼び出すことができます。または、VBProjectでシートオブジェクトのコードネームを変更して、宣言や何かに設定することなく(例えば) 'libWS'としてそれらを参照することができます。あなたのシートがどれほど静的であるかに依存します。 –

+0

あなたのコメントをお寄せいただきありがとうございます。コードレビューセクションがあることはわかりませんでした。私はそれを将来的に活用します – Citanaf

答えて

2

私はあなたが直接Excelオブジェクトモデル内のオブジェクトとしてワークシートを参照することができ、両方のオプションは不要だと思います。あなたはDATALIBRARYにオブジェクト(ないワークシート名)の名前を変更した場合:

enter image description here

は、その後、あなたは、このようなコードでそれらを参照することができます。

enter image description here

+0

ロビン、お返事をいただきありがとうございます。これらのオブジェクトの名前を変更してサブルーチンで使用できるかどうかはわかりませんでした。これは私の人生をはるかに簡単にします! 私はこの議論から抜け出すことを望んでいたという側面の質問は、メモリ使用量に関するものであり、その質問はかなり答えられたとは思わない。おそらく、あなたが助けてくれるかもしれません..私は、すべてのサブ "libWSをワークシート/セットlibWS =ワークシート("ライブラリ ")で宣言していたことを考えれば、それらの宣言は、 5回追加した場合、5枚追加した場合と同じになりますか? – Citanaf

+0

シート変数はオブジェクト自体へのポインタに過ぎません - シートの「コピー」は作成されません –

+0

@Citanaf - 変数を宣言しただけで実際のシートに相当するメモリは使用されませんでした。変数自体に必要なメモリが少なく、ワークシートオブジェクトを指していました。 –

関連する問題