【问题标题】:Two Variables as cell references两个变量作为单元格引用
【发布时间】:2016-03-19 08:23:06
【问题描述】:

我在编写下面的宏时遇到问题。为了简化它,我删除了代码中所有不相关的部分以使其更容易。

Sub Macro1()
Dim a As Integer
For a = 2 To 21
Dim y As Integer
For y = 27 To 47
If InStr(Cells(a, y), “SUB”) > 0 Then
Range(Cells(a, y), Cells(a, (y + 2))).Select
Selection.Cut
Cells(a, 22).Select
ActiveSheet.Paste
End If
Next y
Next a
End Sub

发生的情况是,它正在剪切和粘贴 y=27 到 y=47 的所有范围,而不仅仅是通过 IF 语句的单元格。我怀疑这与为列标识符和行标识符使用变量有关,但不知道。

它应该做的是找到一个包含“SUB”的单元格,然后复制该单元格及其右侧的 2 个单元格并将它们粘贴到同一行,但第 22-24 列。

有人有什么想法吗?

【问题讨论】:

  • '将通过 IF 语句'。您是否检查过并非所有人都通过了if?使用 F8 单步执行您的代码,这样您就可以看到执行时发生了什么。
  • 也许一些“代码的不相关部分”毕竟是相关的。您显示的代码相当简单(即使它使用 Select 太多)并且没有说明您所描述的内容。
  • JZZ:仔细看,大部分单元格都是空白的,所以它们没有理由通过 if 语句。对约翰:我说代码的其他部分与问题无关,因为当它被剥离到这个问题时,我得到的问题与我从完整版本中得到的相同。

标签: string vba loops variables


【解决方案1】:

您发布的代码没有明显的问题,但可以通过删除选择来改进/缩短它

Sub Macro1()

    Dim a As Long, y As Long

    For a = 2 To 21
        For y = 27 To 47
            If InStr(Cells(a, y), "SUB") > 0 Then
                Cells(a, y).Resize(1, 3).Cut Cells(a, 22)
            End If
        Next y
    Next a

End Sub

【讨论】:

  • 虽然这很好并且使宏运行速度明显更快,但在它完成后,Cells(a, 22) 仍然以 Cells(a, 47) 中的值和任何值结束在 Cells(a,27) 到 Cells(a, 49) 中的那些已被清除。
  • 这不是我在测试中看到的。您是否正在使用我发布的代码?您是否在工作表上运行任何事件处理程序?
  • 我不知道这是怎么发生的,但是在您编写的确切代码不起作用之后,我删除并重新输入了“SUB”部分,现在它可以正常工作了。我请求有人向我解释一下 excel 的特殊怪癖。
  • 感谢蒂姆的帮助
  • 看起来您问题代码中 SUB 周围的引号已变为“智能引号”(我刚刚在我的代码中修复了该问题)。但是,智能引号通常会给您在 VB 编辑器中的编译错误...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多