【问题标题】:selecting an entire row based on a variable excel vba根据变量excel vba选择整行
【发布时间】:2012-05-22 03:42:08
【问题描述】:

我正在尝试在不同的工作表中选择一整行,然后使用宏将该行复制到我当前所在的工作表中。如果 Rows() 子通过硬编码的整数传递,则代码工作正常,但是当我输入变量时,我得到“范围类的选择方法失败”错误。这是我的代码:

Sheets("BOM").Select
Rows(copyFromRow & ":" & copyFromRow).Select
Selection.Copy
Sheets("Proposal").Select
Rows(copyToRow & ":" & copyToRow).Select
ActiveSheet.Paste
copyToRow = copyToRow + 1
Rows(copyToRow & ":" & copyToRow).Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

如果我改为使用:

Rows("52:52").Select
Selection.Copy

它工作正常,但是当变量存在时,就会发生错误。

谢谢

【问题讨论】:

  • 你在调试模式下检查过copyFromRow的值吗?是52吗?此外,如果copyFromRow 是一个数字,您可以简单地使用Rows(copyFromRow)
  • 是的,它是正确的值,我尝试了两种方法,都不起作用

标签: excel vba


【解决方案1】:

我刚刚测试了底部的代码,它打印了两次16384(我在 Excel 2010 上),第一行被选中。您的问题似乎出在其他地方。

您是否尝试过摆脱选择:

Sheets("BOM").Rows(copyFromRow).Copy
With Sheets("Proposal")
    .Paste Destination:=.Rows(copyToRow)
    copyToRow = copyToRow + 1
    Application.CutCopyMode = False
    .Rows(copyToRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End With

测试代码以确信问题似乎不是您认为的那样。

Sub test()

  Dim r
  Dim i As Long

  i = 1

  r = Rows(i & ":" & i)
  Debug.Print UBound(r, 2)
  r = Rows(i)
  Debug.Print UBound(r, 2)
  Rows(i).Select

End Sub

【讨论】:

    【解决方案2】:

    我首先解决了工作表的问题:

    ws.rows(x & ":" & y).Select
    

    没有对工作表 (ws) 的引用,我得到了一个错误。

    【讨论】:

      【解决方案3】:

      在另一个网站上看到了这个答案,它也对我有用!

      Shawn 于 2001 年 10 月 14 日下午 1:24 发布

      var1 = 1

      var2 = 5

      Rows(var1 & ":" & var2).Select

      这对我有用,看起来您只需将变量保留在引号之外并添加 and 语句 (&)

      -肖恩

      【讨论】:

        【解决方案4】:

        关键在冒号和&两边的引号中,即rows(variable & ":" & variable).select

        适应这个:

        Rows(x & ":" & y).select
        

        其中 x 和 y 是您的变量。

        其他一些可以帮助你理解的例子

        Rows(x & ":" & x).select
        

        或者

        Rows((x+1) & ":" (x*3)).select
        

        或者

        Rows((x+2) & ":" & (y-3)).select
        

        希望你能明白。

        【讨论】:

          【解决方案5】:

          您需要添加引号。 VBA 正在翻译中

          Rows(copyToRow & ":" & copyToRow).Select`
          

          进入

           Rows(52:52).Select
          

          尝试改变

          Rows(""" & copyToRow & ":" & copyToRow & """).Select
          

          【讨论】:

          • 不,copyToRow & ":" & copyToRow 已经是一个字符串。你的提议会报错。
          【解决方案6】:

          需要确保变量和“&”符号之间的空格。 检查图像。 (红色表示无效命令)

          正确的解决办法是

          Dim copyToRow: copyToRow = 5      
          Rows(copyToRow & ":" & copyToRow).Select
          

          【讨论】:

            【解决方案7】:
            mycell = ActiveCell
            r = mycell.Row
            c = mycell.Column
            Range(Cells(r, c), Cells(r + 100, c)).Select
            

            【讨论】:

              猜你喜欢
              • 2018-11-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-28
              • 1970-01-01
              • 1970-01-01
              • 2019-04-01
              相关资源
              最近更新 更多