我一直有使用宏从关闭的工作簿中提取数据的问题。
上面的图片是主要的工作簿,我想将宏插入其中。在单元格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”部分有关,但我不确定如何重写它并避免错误。
答案 0 :(得分:6)
首先,不要将路径粘贴到您计划覆盖的单元格中。相反,请创建一个包含重要输入参数的单独工作表(请参阅下面的示例;我正在调用该工作表"系统")。
下面的代码从工作簿中提取数据"原始数据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