-1

あるワークブックから別のワークブックに 2 つの別々の列のデータをコピーする必要があります。

これが私のコードです:

Workbooks.Open Filename:=file & "\GSP - " & months(numMonth) & " 1-" & numdays (numMonth) & " " & tYear & " - Prem.xls", _
Origin:=xlWindows, UpdateLinks:=False, ReadOnly:=True

ActiveWorkbook.Sheets(tDay).Activate
range("AA6:AA40").Select
Selection.Copy

Windows(fileM & ".xls").Activate
Sheets("Summary").Activate
range("C3:C37").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

ActiveWorkbook.Close
ActiveWindow.Close

Workbooks.Open Filename:=file & "\GSP - " & months(numMonth) & " 1-" & numdays(numMonth) & " " & tYear & " - Prem.xls", _
Origin:=xlWindows, UpdateLinks:=False, ReadOnly:=True

ActiveWorkbook.Sheets(tDay).Activate
range("AA84:AA118").Select
Selection.Copy

Windows(fileM & ".xls").Activate
Sheets("Summary").Activate
range("H3:H37").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

ActiveWorkbook.Close
ActiveWindow.Close

マクロの実行が終了しても、2 番目のコピーは完了せず、2 番目の Windows(fileM & ".xls").Activate のブレークでエラー 9 が残ります。

4

2 に答える 2

1

このコードには多くの問題があります。前述のとおり、tDay を定義していません。これは他の場所で定義されていると思います。そうしないと、ここまで到達できません。

ActiveWorkbook常に期待どおりのワークブックであるとは限らないため、可能な限り使用を避ける必要があります。Workbook変数を作成して、選択したワークブックに割り当てる方がはるかに優れています。代わりにそれを使用します。これが問題の原因であると思われます.ActiveWorkbook.Closeはあなたが期待するものを閉じていません.

次に、ファイルを開き、そこからコピーし、閉じて、繰り返します。開いたままにしないのはなぜですか?

次に、範囲に対してアクションを実行するために、常に .Select を呼び出す必要はありません。オブジェクトから直接 .Copy および .PasteSpecial を呼び出すことができRangeます。

私はあなたの意図についていくつかの仮定を立てていますが、次のコードには上記の提案が組み込まれています。

Sub foo()
    Dim wkbGSP As Workbook
    Dim wkbFileM As Workbook

    tday = "sheet1"

    Set wkbFileM = Workbooks(fileM & ".xls")

    Workbooks.Open Filename:=file & "\GSP - " & months(numMonth) & " 1-" & numdays (numMonth) & " " & tYear & " - Prem.xls", _
    Origin:=xlWindows, UpdateLinks:=False, ReadOnly:=True

    Set wkbGSP = ActiveWorkbook

    wkbGSP.Sheets(tday).Range("AA6:AA40").Copy

    wkbFileM.Sheets("Summary").Activate
    Range("C3:C37").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    wkbGSP.Sheets(tday).Activate
    Range("AA84:AA118").Copy

    wkbFileM.Sheets("Summary").Activate
    Range("H3:H37").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    wkbGSP.Close
End Sub
于 2013-09-12T19:30:05.663 に答える
0

範囲外またはそのようなシート番号がないなど、tDay値が見つからないと推測します。この値をどのように定義しますか?

于 2013-09-12T19:20:49.847 に答える