【问题标题】:VBA issue using .Offset and .Resize使用 .Offset 和 .Resize 的 VBA 问题
【发布时间】:2017-02-08 06:54:23
【问题描述】:

我正在复制一个 VBA 脚本,用于将 4 个类似数据的选项卡合并到一个选项卡中。由于此代码忽略了 Col A 上的空白单元格,因此在复制/粘贴部分遇到了一些麻烦。我试图通过使用代码来查找基于 Col C 的范围,然后偏移结果范围以添加回 Col A 和 Col B. 但它并没有真正起作用,我不知道如何继续。

coopy + paste 的原始脚本:

 'Data range in worksheet - starts from second row as first rows are the header rows in all worksheets
    Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536, 1).End(xlUp).Resize(, colCount))

我的修改:

'Data range in worksheet - starts from second row as first rows are the header rows in all worksheets
    Set rng = sht.Range(sht.Cells(2, 3), sht.Cells(65536, 3).End(xlUp).Resize(, colCount))
    Set rng = rng.Offset(-2,).Resize(,2)

数据看起来像这样。我想复制到 C24,但由于 Col A 中的空白单元格,脚本只能复制到 C15。

enter link description here

【问题讨论】:

  • 如果您删除 .Resize(, colCount),它看起来应该可以工作。 colCount 是如何定义的?
  • 你有一行代码使用了Set。你复制它并删除Set。虽然rng 可能是Variant,并且您首先在引用上下文中使用它,然后有点混淆地分配rng.Value = rng.Offset(-2,).Resize(,2).Value,但您更有可能应该put the Set back
  • rng = rng.Offset(-2,).Resize(,2) 应该是 Set rng = rng.Offset(-2,).Resize(,2)。您需要Set VBA 对象。
  • 我已经尝试过了,它给了我一个编译错误:该行的语法错误 Set rng = rng.Offset(-2,).Resize(,2)
  • 我是说您在问题中提出的问题已解决(并且确实有资格作为错字)。您现在遇到的问题是另一个问题,它来自您的程序逻辑,只有您了解。在您的第一次分配之后,rng 包含一个不能向上移动两行的范围,这是因为它从 A2 开始。

标签: vba excel


【解决方案1】:

你有:

Set rng = sht.Range(sht.Cells(2, 3), sht.Cells(65536, 3).End(xlUp).Resize(, colCount))
Set rng = rng.Offset(-2,).Resize(,2)

rng 的左上角单元格位于 (2, 3) 或 A1 表示法中的 C2 处,然后您偏移 (-2, 0),从而使左上角单元格位于 (0, 3) 处。整个工作表左上角的单元格始终为 (1, 1),因此任何小于 1 的行或列索引都是错误的。

当您尝试按列偏移时,您可能想要(假设 colCount 设置正确 - 它看起来应该等于 3):

Set rng = sht.Range(sht.Cells(2, 3), sht.Cells(65536, 3).End(xlUp))
Set rng = rng.Offset(0, -2).Resize(, colCount)

我已指定行偏移量为 0 而不是将其留空,因为对我而言,它更易于阅读,但其他人可能更喜欢 Offset(, -2)。调整大小的工作方式不同,因此我们需要将行参数留空

【讨论】:

  • 感谢这工作!移动 colCount 并反转偏移量消除了所有错误!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2014-08-26
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多