【发布时间】:2021-09-22 11:15:14
【问题描述】:
我已经花了很长时间试图让这个 sub 工作,但我的 excel 冻结或出现错误。
我通常得到的错误是运行时错误'1004': 应用程序定义或对象定义的错误 --> 'set rng = ...' 行
我的问题:
我试图让我的 sub 循环遍历一个最好设置为 ActiveWorkbook 的工作簿,而不是设置的工作簿,因为它将位于另一个循环中,该循环将遍历文件夹中的工作簿。然后我希望它遍历工作簿 x 中的行,并从不同的 Cell.Offset(0,x) 显示的不同列中复制某些值。然后,它需要将这些值粘贴到主工作簿中,在子工作簿中表示为 y,在 Range("A" & roww)、Range("B" & roww) 等显示的不同列中。
我的代码在这里:
Sub transferingDataToMaster()
Dim x As Workbook, y As Workbook, rng As Range, Cell As Variant, roww As Long
'## Open both workbooks first:
Set x = Workbooks.Open("/Users/esrom/Desktop/P4H/Test/Jan_19_2.xlsm")
Set y = Workbooks.Open("/Users/esrom/Desktop/P4H/Test/Master_Test.xlsm")
Set rng = x.Sheets("Sheet1").Range(Range("G2"), Range("G2").End(xlDown))
For Each Cell In rng.Cells
roww = Cell.Row + 2
'Now, transfer values from x to y:
y.Sheets("Sheet1").Range("A" & roww).Value = Cell.Value
y.Sheets("Sheet1").Range("B" & roww).Value = Cell.Offset(0, 6).Value
y.Sheets("Sheet1").Range("C" & roww).Value = Cell.Offset(0, 7).Value
y.Sheets("Sheet1").Range("D" & roww).Value = Cell.Offset(0, 8).Value
y.Sheets("Sheet1").Range("E" & roww).Value = Cell.Offset(0, 10).Value
y.Sheets("Sheet1").Range("F" & roww).Value = Cell.Offset(0, 11).Value
Next
End Sub
我尝试查看其他问题,但它们似乎不适用于我的问题,我可以设法让它适用于设定值但不适用于变量。
有人能帮我找到问题并更正代码吗?在此先感谢:)
【问题讨论】:
-
您应该检查以确保您打开的
x和y工作簿实际上是打开的。因此测试If x Is Nothing Then Exit Sub将起作用,或者执行您自己对该条件的处理。 -
另外,可以肯定的是,限定范围 within 范围:
Set rng = x.Sheets("Sheet1").Range(x.Sheets("Sheet1").Range("G2"), x.Sheets("Sheet1").Range("G2").End(xlDown)) -
@PeterT 在我运行子程序时它们都已打开
-
@BruceWayne 解决了这个问题,非常感谢!