【发布时间】:2020-02-04 15:33:51
【问题描述】:
我有一个可以访问两个不同工作簿的个人宏。
这是更新后的代码:
Sub Copy_and_Paste()
Dim ws1 As Worksheet Set ws1 = Workbooks("Submittals").Worksheets("Sheet1")
Dim ws2 As Worksheet Set ws2 = Workbooks("Previous").Worksheets("Sheet1")
Dim num_rows_A As Integer
Dim num_rows_B As Integer
num_rows = ws1.Range("A1", Range("A1").End(xlDown)).Count
MsgBox ("Num rows in A = " & num_rows)
num_rows_B = ws2.Range("A1", Range("A1").End(xlDown)).Count
MsgBox ("Num rows in B = " & num_rows_B)
End Sub
当我运行代码时,如果 A 处于活动状态,则 A 的 MsgBox 有效,但 B 出现此错误:
运行时错误“1004”应用程序定义或对象定义错误。
如果 B 处于活动状态,我会收到错误消息。
如果我注释掉与 A 相关的所有三行,则用于 B 的 MsgBox 可以正常工作。
知道我可以做些什么来访问这两个工作簿吗?
我不明白将范围限定为工作表是什么意思。关于我可以去哪里阅读有关此内容的任何建议?
谢谢。
【问题讨论】:
-
有两个“Range”-s,但只有一个符合“Workbooks(“A”).Worksheets(“Sheet1”)。”每个 Range-s 都需要适当限定,A 或 B。仅仅因为第二个在括号内并不意味着它继承了外部限定。
-
查看With...End With 以缩短代码 - 正如@donPablo 所说,
Range("A1").End(xlDown)需要符合工作表才能。 -
谢谢。我查找了限定对象,并尝试将其添加到我的代码中,同时更改引用,但我仍然遇到问题。 : Dim ws1 As Worksheet Set ws1 = Workbooks("Submittals").Worksheets("Sheet1") Dim ws2 As Worksheet Set ws2 = Workbooks("Previous").Worksheets("Sheet1") 如何限定来自两个不同工作簿的工作表?
-
@H.Watkins 请编辑您完全更新的代码 - 很有可能您还没有完全符合所有
Ranges 的条件。 -
不幸的是,我仍然对如何限定工作表的范围感到困惑。还有什么建议吗?