【问题标题】:Range using cells is showing error [duplicate]使用单元格的范围显示错误[重复]
【发布时间】:2017-11-28 08:10:30
【问题描述】:

我想将数据从一个工作表复制到另一个工作表(取决于可用工作表的数量),列数是动态的。

如果我使用下面的代码,它会显示应用程序对象错误:

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = ThisWorkbook.Worksheets(i).Range(Cells(3, 2), Cells(3, 7)).Value

如果我使用这个:

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = ThisWorkbook.Worksheets(i).Range("B2:G2").Value

它工作正常,但我无法使我的列动态化。

【问题讨论】:

  • 这类问题在 SO.. 中已经被问过很多次了。我可以指出至少 10 个不同的问题
  • @SiddharthRout ALL VBA 问题至少被问了 10 次。答案总是归结为“限定你的对象”、“停止使用 Select and Activate”、“声明你的变量”。
  • @YowE3K:顺便说一句,您不必删除答案。请取消删除。我已投票取消删除您的答案:)
  • @SiddharthRout 删除我的答案不是更好吗,以便将来的搜索者关注原始问题的链接。 (这个问题的发帖人已经采纳了我的答案,所以他们很高兴,我们现在需要关注的只是未来的搜索者。)我现在取消删除答案,但如果你重新考虑会再次删除它您的最后一条评论。

标签: excel vba


【解决方案1】:

如果您没有限定您的 Cells 引用,它们默认为 ActiveSheet.Cells。因此你的代码

Worksheets(1).Range(Cells(m, 2), Cells(m, 7)).Value = _
     ThisWorkbook.Worksheets(i).Range(Cells(3, 2), Cells(3, 7)).Value

等价于

Worksheets(1).Range(ActiveSheet.Cells(m, 2), ActiveSheet.Cells(m, 7)).Value =  _
     ThisWorkbook.Worksheets(i).Range(ActiveSheet.Cells(3, 2), ActiveSheet.Cells(3, 7)).Value

这显然没有意义。

你应该使用

Worksheets(1).Range(Worksheets(1).Cells(m, 2), Worksheets(1).Cells(m, 7)).Value = _
     ThisWorkbook.Worksheets(i).Range(ThisWorkbook.Worksheets(i).Cells(3, 2), ThisWorkbook.Worksheets(i).Cells(3, 7)).Value

如果你设置一些 Worksheet 对象,这会更容易阅读

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = ActiveWorkbook.Worksheets(1)
Set ws2 = ThisWorkbook.Worksheets(i)

ws1.Range(ws1.Cells(m, 2), ws1.Cells(m, 7)).Value = _
     ws2.Range(ws2.Cells(3, 2), ws2.Cells(3, 7)).Value

【讨论】:

  • 非常感谢,现在可以使用了
  • ++ 谢谢 :)
猜你喜欢
  • 2018-09-02
  • 2020-05-19
  • 2012-10-26
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2021-03-18
  • 2017-09-01
相关资源
最近更新 更多