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

pmc*_*h92 3 excel vba pull excel-vba

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

在此输入图像描述

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

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

从那时起,我编写了一个宏,我相信它将打开所有名为"原始数据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
Run Code Online (Sandbox Code Playgroud)

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

one*_*her 7

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

在此输入图像描述

下面的代码将源数据从工作簿"原始数据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
Run Code Online (Sandbox Code Playgroud)