下标超出范围(错误9)以导入数据

时间:2013-09-12 19:06:44

标签: excel vba

我需要将两个单独的数据列从一个工作簿复制到另一个工作簿。

这是我的代码:

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

当宏完成运行时,第二个副本没有完成,我在第二个Windows(fileM&“。xls”)的休息处留下错误9。激活'

2 个答案:

答案 0 :(得分:1)

我发现这段代码存在很多问题。如前所述,你没有定义tDay。我认为这是在其他地方定义的,否则你就不会得到这么多。

应尽可能避免使用ActiveWorkbook,因为它可能并不总是您期望的工作簿。创建Workbook变量并将其分配给选定的工作簿要好得多;然后用它代替。我怀疑这是你的问题的原因 - ActiveWorkbook.Close没有关闭你期望的那个。

接下来,您将打开文件,从中复制,关闭文件并重复。为什么不把它打开?

接下来,您并不总是需要调用。选择以对范围执行操作。您可以直接从Range对象调用.Copy和.PasteSpecial。

我对你的意图做了一些假设,但是下面的代码包含了上面的建议。

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

答案 1 :(得分:0)

未找到您的tDay值,例如超出范围或没有此类工作表编号。你如何定义这个值?