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"部分有关,但我不确定如何重写这个并避免错误.
首先,不要将路径粘贴到您计划覆盖的单元格中.相反,创建一个包含重要输入参数的单独工作表(请参阅下面的示例;我将该工作表称为"系统").

下面的代码将源数据从工作簿"原始数据1"中提取到"原始数据3".
.
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)