我一直在使用 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 列。
最佳答案
"The worksheet that the code is running from is the current version of Excel but the source data files are 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 列。
关于excel - 使用 xlToLeft 设置范围在第 256 列后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68024492/