vba - 在一个范围内选择一个范围

标签 vba excel

我使用以下 VBA 代码 (MS Excel 2010) 选择给定范围内的一系列单元格,复制复制的单元格并将其插入回源范围: 该范围从工作表中的第 2 行开始,一直到第 2200 行,从第 50 列到第 65 列。

设置 rngFEA = shtTarget.range("myrange") iMaxLines = 20 使用 rngFEA .Range(单元格(3, 1), 单元格(3 + iMaxLines, .Columns.Count)). 复制 .Range(单元格(3, 1), 单元格(3 + iMaxLines, .Columns.Count)). 插入 Shift:=xlDown 结束于

这样做(不引用单元格(行,列)参数的 rngFEA)效果很好,所选单元格是预期范围的一部分。

我不喜欢对 cells() 参数不使用任何引用,因为不使用引用会使单元格引用工作表并给出错误的结果,所以我宁愿使用 rngFEA.cells():

设置 rngFEA = shtTarget.range("myrange") iMaxLines = 20 使用 rngFEA .Range(.Cells(3, 1), .Cells(3 + iMaxLines, .Columns.Count)).复制 .Range(.Cells(3, 1), .Cells(3 + iMaxLines, .Columns.Count)). 插入 Shift:=xlDown 结束于

但结果范围远远超出了 rngFEA 范围,位于左侧和下方的某个位置。 我什至找不到所使用的索引和生成的偏移量之间的关系。

我相信 range.insert 也可以表述为

rngFEA.cells(3,1).insert shift:=xldown

但这不是我现在关心的问题。

我很清楚引用与否的区别,但我不明白为什么不使用对范围的引用会给出正确的结果,而使用引用则不会。

我期待

rngFEA.range(rngFEA.cells(1,1), rngFEA.cells(10,10))

返回给定范围最上面、最左边的单元格到同一范​​围内向右和向下的第十个单元格的范围。 在示例代码中,我选择给定范围内第 3 行最左边的单元格,一直到第 23 个单元格和范围的右端。 (实际选择的行是工作簿中的第 3 行,因此是范围中的第 2 行) 我查看了 Microsoft 信息和几个论坛,但找不到充分描述此效果的解释。

我知道

range.row 

返回工作表中范围开始的行号,

range.column 

返回范围开始的列。

选择给定范围内的单元格或行

range.row(2)

不返回范围的第二行,而是返回工作表的第二行。

for each myrow in range.rows

索引

myrow.row

返回范围内的行号,但使用它作为选择索引似乎返回工作表内的行,所以我需要添加

range.row + myrow.row

索引到范围内的实际行。

这背后的机制以及上述在范围内选择范围的行为让我感到困惑。 由于使用 VBA 在 Excel 中处理事情的方法有很多,我希望您能给我所描述的行为的一般解释,而不是解决方案(如果不是为了解释原因):)

提前谢谢

伊达里尔

最佳答案

可以确认此行为:

Sub Tester()

    Dim rng As Range

    Set rng = Range("C3:H28")

    'This selects E5:F6 (???)
    With rng
        .Range(.Cells(1, 1), .Cells(2, 2)).Select
    End With


    'This selects C3:D4 (expected)
    With rng
        rng.Parent.Range(.Cells(1, 1), .Cells(2, 2)).Select
    End With

End Sub

似乎这可能与同时使用 .Range.Cells 的“双重相对”组合有关

相反,使用rng.Parent.Range并仅使.Cells相对于包含范围似乎可以修复它(并且仍然允许完全限定的范围引用)

关于vba - 在一个范围内选择一个范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39036185/

相关文章:

sql - 计算包含 25 年数据的 Access 表中每月的记录数

excel - 在 Excel Visual Basic 中从 CSV 中删除连续的重复值

vba - 如何在多张纸上应用卡住 Pane ?

spring - Spring/JSP 中导出到 Excel JQGrid 数据

excel - Excel 在哪里添加 list 文件安装到 Mac 上?

VBA EXCEL 提示用户响应选择文件夹并将路径作为字符串变量返回

excel - QTP/UFT : Comparing two excelsheets easy and performant using VB

vba - 复制到新工作表后用颜色填充行

vba - 在单元格 VBA 中创建指向工作表的超链接

excel - 一次更改工作表中的多个命名单元格和范围