2016-06-30 10 views
1

私は技術的な質問があります:私は別のブックに複数のワークシート(ない一定の範囲)から複数の範囲をエクスポートする必要があるので、私はExcel vbaバリアント配列を再利用可能、消去する必要がありますか?

Dim arrTemp as Variant 
Dim wbSource as workbook 
Dim wbTarget as workbook 

を作成 :

私の問題を。私のコードは次のようになります。

' Worksheet 1 
arrTemp = wbSource(1).Range("A1:B2").value 
wbTarget(1).Range("A1:B2").value = arrTemp 
If Not(IsArrayEmpty(arrTemp)) Then Erase arrTemp 
' Worksheet 2 
arrTemp = wbSource(2).Range("A1:B2").value 
wbTarget(2).Range("A1:B2").value = arrTemp 
If Not(IsArrayEmpty(arrTemp)) Then Erase arrTemp 
' Worksheet 3 
arrTemp = wbSource(3).Range("A1:B2").value 
wbTarget(3).Range("A1:B2").value = arrTemp 
If Not(IsArrayEmpty(arrTemp)) Then Erase arrTemp 

が(ワークシートに含めることができる(ワークシートが空ARRハンドラが理由です、最初の場所で空にすることができます)、INT/STR /ダブル/ ...とサイズはそれほど大きくはありません特定のarrタイプを定義してください)

私の質問は: いつもアレイを消去するのは意味がありますか?または自動的に上書きされますか?

新しい範囲で配列を定義する前と後で配列のプロパティ(Lbound & UBound)をチェックするテストを行いました。私はそれが自動的に配列をRedimすることがわかります。それは私が手順の終わりにそれをクリアするだけでいいということですか?

または、間にクリアすることをお勧めしますか?

最後に、私のコードに問題はありませんか?このタスクを実行するためのより良い方法は?

事前に感謝します。

編集: コードはこのタスクでは正しくありません。アレイに転送する必要はありません。要するに

+1

正直言って、ある範囲の値を別の値に割り当てるのではなく、変数を使用することに何のメリットもありません。ただし、アレイを消去する必要はありません。 – Rory

+0

おかしい。私は何年間もVBAをフルタイムでプログラミングしていましたが、このEraseコマンドがあったことさえ知りませんでした。 @Rory。 –

+0

私はこの方法を "Power Programming 2013"からarray-transfer-methodでコピーして範囲を広げました(うんざりだが、私は何十万行も使っていない)。あなたのアドバイスは範囲から範囲に簡単に送信することになりますか? – Charlie

答えて

0

(ロリーする感謝!):

配列に間内のすべての時間を消去する必要はありません。 手順を終了する前にのみ。

+1

退室する前でさえも。それは自動的に破壊されます。しかし、終了する前に**オブジェクト変数**を 'Nothing'に'セットする 'のが良い習慣のようです。 –

+0

@iDevlopああ..私は良い慣行のコードに従おうとしていました...私は高水準のコードを勉強したいのですが、普通は何もクリアしていない人は見えません。ガベージコレクタはほとんどすべてをしていると思います。あなたの洞察力に感謝します。ありがとう! – Charlie

関連する問題