【问题标题】:Setting Range Using xlToLeft Fails After 256'th Column在第 256 列后使用 xlToLeft 设置范围失败
【发布时间】:2021-09-02 13:28:37
【问题描述】:

我一直在使用 VBA 从一些原始数据文件中循环和复制数据。对于每次迭代,我一直使用以下代码来定义目标范围:

Set destinationRange = WorksheetRange.Cells(2, Columns.Count).End(xlToLeft).Offset(0, 1)

这在第 256 列之前都可以正常工作。在此之后,不是将目标范围设置为第 2 行中的下一个空单元格,而是返回到单元格 (2,2),就好像起始参考单元格 (.Cells(2, Columns.Count)) 在占用范围内,并且.End 方法将返回到占用范围的开头。但这不应该是这种情况,即使在运行时我已经验证 Columns.Count 应该等于 16384。那么为什么代码似乎使用单元格(2,256)作为.Cells(2,Columns.Count)的结果?我还尝试将值添加到超过 256 列的单元格中,以尝试删除涉及 Columns.Count 占位符值的任何类型的行为,但这也不起作用。

感谢您对此的任何见解。还值得注意的是,没有运行时错误被触发,复制的数据只是在到达第 256 列后开始覆盖第 2 列。

【问题讨论】:

  • 你的意思是,如果你在单元格 2,500 destinationRange 中输入内容,仍然是单元格 2,256?不知道怎么会这样。
  • 无法重现。 B 之后的任何一列中的第 2 行实际上是否有数据?
  • 原始数据文件的第2行是否总是有数据?
  • 所以我只是按照@SJR 所说的进行了一个快速实验,我在单元格 (2, 200) 和单元格 (2,500) 中放置了一个值。当遍历包含 10 个数据文件的文件夹并从每个文件中复制一列时,我最终会得到 201-210 列中的数据,而预期结果将是 501-510 列中的数据。如果我用单元格 (2,200) 和单元格 (2, 250) 中的值重复这个实验,我最终会在第 252-256 列中得到来自文件 2-6 的数据,然后在第 251 列中得到来自文件 10 的数据,就好像数据一样文件 1 中的数据被文件 7 中的数据覆盖,然后是 8、...、10。
  • 您是否使用 xl2003 文件 - 似乎记得列限制为 256,也许这是一个问题。

标签: excel vba loops excel-2003


【解决方案1】:

“运行代码的工作表是当前版本的 Excel,但源数据文件是 xl2003”。

可能你被隐含的ActiveSheet咬了:

WorksheetRange.Cells(2, Columns.Count).End(xlToLeft).Offset(0, 1)

应该是

WorksheetRange.Cells(2, WorksheetRange.Columns.Count).End(xlToLeft).Offset(0, 1)

由于ActiveSheet (xl2003) 只有 256 列,End(xlToLeft) 在第 256 列之后返回到第 1 列。

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    相关资源
    最近更新 更多