循环范围不允许 Range(Cells,Cells) 仅 Range("A:A")

Posted

技术标签:

【中文标题】循环范围不允许 Range(Cells,Cells) 仅 Range("A:A")【英文标题】:Looping with ranges not allowing Range(Cells,Cells) only Range("A:A") 【发布时间】:2017-08-15 14:43:24 【问题描述】:

背景:

我有一个 7 x 30 单元格的数组要循环。对于 30 列 (Dim j) 中的每一列,我循环遍历行 (Dim i) 1 以查看是否存在值,如果存在则开始复制第 2 到第 7 行的范围。

尝试使用(例如):

Sheets("NAME").Range(Cells(i+1,1),Cells(i+7,1)).Copy

我收到一个 1004,应用程序定义或对象定义的错误,我已经能够使用以下方法缓解:

Sheets("NAME").Range("A" & i+1 & ":A" & i+7 & ").Copy

我的代码在线出错:

Sheets("RM").Range(Cells(i + 6, 2), Cells(i + 13, 2)).Copy

问题:

这适用于具有已知列的项目,但我也不确定如何处理可变列。我知道这不起作用:

Sheets("NAME").Range(Cells(i+1,j),Cells(i+7,j)).Copy

我需要找到一种方法来拟合这个没有单元格的 Range 模型,以便为变量列 j 工作。


问题:

有没有办法在不使用单元格的情况下使用 Range 来完成这项工作?

我唯一的猜测是以下,我认为它使用了不正确的语法:

Sheets("NAME").Range(Columns(j) & i+1 & ":" & Columns(j) & i+1).Copy 

任何帮助将不胜感激!

编辑:将错误 1004 名称添加到此问题部分。

【问题讨论】:

你遇到了什么错误? @ScottCraner 对不起,我错过了我只列出了“一个错误”,而不是该行的 1004 错误。更新了帖子,并添加了我收到错误的确切行(不是帖子的重新哈希)。 然后,正如下面的答案所示,您需要将相同的父级添加到 Cells(),就像您对 Range() 所做的那样:Sheets("NAME").Range(Sheets("NAME").Cells(i+1,1),Sheets("NAME").Cells(i+7,1)).Copy 【参考方案1】:

尝试在您的 Cells( 呼叫前加上工作表,即 Range(Sheets("Sheet1").Cells(1, 1), Sheets("Sheet1").Cells(2, 2))

当您在调用CellsRange 时省略工作表,那么它将默认引用当前选定的工作表,因此如果您调用Sheets(Unselected Sheet).Range(Cells(1, 1)),它会混淆您是哪个工作表参考。

【讨论】:

问题正是我在回答中所说的。您需要在致电Cells 前加上工作表的名称,例如Sheets("NAME").Range(Sheets("NAME").Cells(i+1,1), Sheets("NAME").Cells(i+7,1)).Copy 明白了,我没看错,Scott 帮助将更多内容重新定向到您所说的内容。谢谢!标记为答案。 抱歉,如果我没有很好地解释它,解释 excel 如何查看引用等有点尴尬。祝你程序的其余部分好运! 谢谢哥们;正在删除我给你的第一条评论,就像你回复它一样。这是有道理的,当我看你给出的第一段时,我只是迷失在台词的延续上。我的错,你很坚强。

以上是关于循环范围不允许 Range(Cells,Cells) 仅 Range("A:A")的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Range 有效,但 Cells 无效?

为啥 Range 有效,但 Cells 无效?

将整个范围转换为大写,而不循环遍历所有单元格

合并函数与范围和单元格

vba用“Cells()”表示不同工作簿中的范围

vba里面 cell和cells sheet和sheets有啥区别