【问题标题】:Accessing two different workbooks from personal macro从个人宏访问两个不同的工作簿
【发布时间】: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 的条件。
  • 不幸的是,我仍然对如何限定工作表的范围感到困惑。还有什么建议吗?

标签: excel vba


【解决方案1】:

您更新后的代码中仍有 2 个不合格的 Ranges - 我在下面为您完全限定了它们:

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", ws1.Range("A1").End(xlDown)).Count

    MsgBox ("Num rows in A = " & num_rows)

    num_rows_B = ws2.Range("A1", ws2.Range("A1").End(xlDown)).Count

    MsgBox ("Num rows in B = " & num_rows_B)

End Sub

【讨论】:

  • 非常感谢!我终于明白每个人都想告诉我什么了。祝福!
  • 请注意,您不能将Integer 用于行计数变量。 Excel 的行数超过了Integer 可以处理的行数,.Count 返回Long!因此,这两个变量都必须是Long 类型。 • 不管怎样,我推荐在 VBA 中使用 always to use Long instead of Integer,因为在 Integer 中根本没有任何好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多