从已关闭的工作簿宏中提取数据

时间:2014-07-25 09:51:02

标签: excel excel-vba pull vba

我一直有使用宏从关闭的工作簿中提取数据的问题。

enter image description here

上面的图片是主要的工作簿,我想将宏插入其中。在单元格A1中,您可以看到有一个文件名位置 - 这是我想从中提取数据的已关闭辅助工作簿的位置。

我希望宏取出单元格A1中存在的位置,将单元格A1:J5000复制到已关闭的工作簿中,然后将它们从A7开始粘贴到此工作簿中(即A7:J5007)。 A1中存在文件名位置的原因是由于这种情况会发生变化;但我希望宏总是采取A1中显示的位置(例如,如果A1从'... \ test00218_data.csv'更改为'... \ test00001_data.csv'那么我希望宏到从新位置获取数据,test00001)。

从那时起,我编写了一个宏,我相信它会打开所有名为“Raw Data x”的表格,并将所需数据粘贴到主表单的相应区域;代码如下:

Sub PullClosedData()

Dim filePath As String

For x = 1 To 1 Step 1

    filePath = Sheets("Raw Data " & x).Cells(1, 1).Value

    Workbooks.Open Filename:=filePath

    Sheets("Raw Data 1").Range("A7:J2113").Value = ActiveWorkbook.ActiveSheet.Range("A1:J2107")
Next x

End Sub

当我运行它时,我得到运行时错误9(超出范围)。我相信这与脚本的“ActiveWorkbook.ActiveSheet”部分有关,但我不确定如何重写它并避免错误。

1 个答案:

答案 0 :(得分:6)

首先,不要将路径粘贴到您计划覆盖的单元格中。相反,请创建一个包含重要输入参数的单独工作表(请参阅下面的示例;我正在调用该工作表"系统")。

enter image description here

下面的代码从工作簿中提取数据"原始数据1"到"原始数据3"来源书。

  • 确保在变量(TargetWb和SourceWb)中正确定义工作簿。
  • 引用工作表时,请始终指定使用多个工作簿时它所在的工作簿(例如TargetWb.ActiveWorksheet,而不仅仅是ActiveWorksheet)

Sub PullClosedData()

    Dim filePath As String
    Dim SourceWb As Workbook
    Dim TargetWb As Workbook

    Set TargetWb = ActiveWorkbook

    filePath = TargetWb.Sheets("System").Range("A1").Value
    Set SourceWb = Workbooks.Open(filePath)

    For i = 1 To 3
        SourceWb.Sheets("Raw Data " & i).Range("A1:J5000").Copy Destination:=TargetWb.Sheets("Raw Data " & i).Range("A1:J5000")
    Next i

    SourceWb.Close

    MsgBox "All done!"

End Sub
相关问题