1

私は 20 個の Excel ワークブックを持っていますが、それぞれが異なるデータで動作することを除いて同じです。数式を改良して更新する必要があることがよくあります。数式をソース ワークブックから他の各ワークブックに順番にコピーします。

私は VBA を使用してマクロを記録し (これはそれほどエレガントではありません)、必要な変更をコピーして貼り付けます。これで問題ありませんが、マクロを 20 回コピーし、そのたびに対象のブック名を変更するのは面倒です。私が推奨する解決策は、ループを設定し、ターゲットごとに順番にマクロを呼び出すことで自動化することです。

私はマクロが初めてで、これの正しい構文に苦労しています。

以下を試してみましたが、うまくいきません。「オブジェクト変数が設定されていません」というエラー メッセージが表示されますが、よく理解できず、解決できません。

Sub New()
'
Dim i As Integer
Dim target As Workbook
target(1) = "Workbook1.xlsx"
target(2) = "Workbook2.xlsx"
'etc for the other countries
For i = 1 To 20
Update
Next i
End Sub

Sub Update()
' Update macro copies updated cells from workbook Country A.xlsx to target workbook
Windows("Country A.xlsx").Activate
Sheets("Tax").Select
Rows("17:26").Select
Selection.Copy
Windows(target(i)).Activate
Sheets("Tax").Select
Range("A17").Select
ActiveSheet.Paste
' Etc for other changes required
End Sub

私が欠けているものについて何か助けていただければ幸いです。

4

2 に答える 2

0

Sub Update は変数iを「認識」していません。検討:

Sub New()
    Dim i As Integer
    Dim target As Workbook
    target(1) = "Workbook1.xlsx"
    target(2) = "Workbook2.xlsx"
    'etc for the other countries
    For i = 1 To 20
        Update (i)
    Next i
End Sub

Sub Update(i As Integer)
    ' Update macro copies updated cells from workbook Country A.xlsx to target workbook
    Windows("Country A.xlsx").Activate
    Sheets("Tax").Select
    Rows("17:26").Select
    Selection.Copy
    Windows(target(i)).Activate
    Sheets("Tax").Select
    Range("A17").Select
    ActiveSheet.Paste
    ' Etc for other changes required
End Sub
于 2013-09-30T11:05:47.563 に答える
0

いくつかの異なることを試した後、上記のコードの問題を回避する解決策を見つけました。これには、配列内のさまざまなターゲット ワークシートの名前を設定することが含まれます。

以下のコードは動作します

Sub Newtest()
'
Dim target As String
Dim targetwb(1 To 2) As String
targetwb(1) = "Workbook3.xlsx"
targetwb(2) = "Workbook4.xlsx"
'
For i = 1 To 2
    target = targetwb(i)
    Test1 (target)
Next i

End Sub

Sub Test1(target)
'
' Copies updated cells from workbook Country A.xlsx to target workbook
'
Windows("Country A.xlsx").Activate
Sheets("Tax").Select
Rows("17:26").Select
Selection.Copy
Windows(target).Activate
Sheets("Tax").Select
Range("A17").Select
ActiveSheet.Paste
'
End Sub
于 2013-10-13T11:55:51.923 に答える