【问题标题】:EXCEL vba | cant Set Range from another Sheetexcel vba |无法从另一个工作表设置范围
【发布时间】:2021-10-01 21:27:51
【问题描述】:

在特定工作表上定义范围时,Excel 会引发错误 1004

我在 Excel vba 中有两张表格: -表 A -表 B

范围表_A:

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim Rng as Range
   Set Rng = Sheets("Sheet_B").Range("A1")
   Set Rng = Range(Rng, Rng.offset(0,1))
End Sub

也许我保护了我的工作表或类似的东西,因为我得到了错误: -> 1004“应用程序定义或对象定义错误”

令人惊讶的是,这不会引发错误,但 Rng.Select 或其他函数也不起作用:

   Set Rng = Range(Rng.Address, Rng.offset(0,1).Address)

顺便说一句: 从 Sheet_B 到 Sheet_A 执行相同的操作效果很好

提前感谢您的帮助

【问题讨论】:

  • 问题在于外部Range 隐含为Me.Range,即指代表A。您需要使用Sheets("Sheet_B") 对其进行限定。或者在这种情况下只是Set Rng = Rng.Resize(2)
  • @BigBen:你的意思是...Resize(, 2)。但是你可以写成一行:Set Rng = Worksheets("Sheet_B").Range("A1").Resize(, 2).

标签: excel vba


【解决方案1】:

正如@BigBen 在他的评论中已经暗示的那样,引发错误是因为您尝试在另一张纸上的范围之间获取一张纸上的范围。 Excel 无法做到这一点。

由于代码在Sheet A后面的代码中,所以下面的代码和你的代码是等价的。

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim Rng as Range
   Set Rng = ActiveWorkbook.Sheets("Sheet_B").Range("A1")
   Set Rng = Me.Range(Rng, Rng.offset(0,1))
End Sub

这里Me指的是表A。

要获得可能想要的结果,您可以明确限定对 Range 的调用,其中包含引用工作表 B 的内容,例如ActiveWorkbook.Sheets("Sheet_B")Rng.Parent 或您之前保存的一些参考资料,或者您可以用不同的方式调整您的范围。在 cmets 中已经提到了后者的一个示例,使用 Resize

【讨论】:

  • @BigBen:首先应该阅读整本书。谢谢。
  • @M.Doerner 非常感谢 :)
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 2017-03-26
  • 2015-11-17
  • 2021-09-30
  • 1970-01-01
  • 2016-09-17
  • 2019-06-01
  • 2020-06-11
相关资源
最近更新 更多