2017-07-14 7 views
1

私は自分のWS内のセルをループしていて、条件を満たすセルをループが見つけ出すと、範囲(または配列)にセルアドレスを追加します。私はSetシンプルなVBA:ユニオンで範囲にセルアドレスを追加しますか?

Dim CellArray As Range 
With ws 
    With .Cells(Application.WorksheetFunction.Match("Total checks", .Range("A:A"), 0), Application.WorksheetFunction.Match(ComboBox1.Value,0)) 
     .Formula = "=SUM('" & Root & sourceSheet & ws.Name & " " & monthNumber & "." & lastDay & "." & Format(Now(), "yy") & "'!$H:$H)" 
     Set CellArray = Union(CellArray, This.Address) 

答えて

1

あなたCellArray変数が初期化されていない最後の行でオブジェクトRequriedエラーが発生します。従って、最初はNothingであり、Unionは引数としてNothingを取ることができません。

また、Withオブジェクト(Thisは存在しません)にアクセスすることはできません。したがって、最初に変数にRangeに影響を与える必要があります。ループ本体を書くことができ

(あなたは事前にDim R As Rangeを宣言する必要があり):それは難しいコードは、ほとんどの状況で読み取るようになるため

Set R = Cells(Application.WorksheetFunction.Match("Total checks", .Range("A:A"), 0), Application.WorksheetFunction.Match(ComboBox1.Value,0)) 

R.Formula = "=SUM('" & Root & sourceSheet & ws.Name & " " & monthNumber & "." & lastDay & "." & Format(Now(), "yy") & "'!$H:$H)" 

If CellArray Is Nothing Then 
    Set CellArray = R 
Else 
    Set CellArray = Union(CellArray, R) 
End If 
+0

「This」に変数が定義されていません。 –

+0

@SeanKellyあなたのコードでそのことを確認しませんでした。修正されました。 – cub

+0

私は同じコード行を持っていて、それぞれが一致する必要がある異なる合計を参照しています。 'R 'に加えて41の異なる範囲変数を宣言することなくこれを行う方法はありますか?これはまた、私が 'With'ステートメントを使用している理由です。 –

0

が、これは

コマンド「で」使用しないでくださいしてみてください

関連する問題