【问题标题】:Excel VBA - Paste a variable's value into a cellExcel VBA - 将变量的值粘贴到单元格中
【发布时间】:2016-06-26 02:47:32
【问题描述】:

我有一个For 循环,它将找到一个具有特定值的单元格(例如“项目”一词)。一旦它找到这个单元格,我想将一个值粘贴到它下面的行中,在第一列中。

例如,如果For 循环在单元格 A1 中找到“项目”,我想将变量的值粘贴到单元格 I2 中。

我希望能够同时使用 Long 变量和 String 变量来执行此操作。

现在我正在尝试类似的东西:

Cells(i.Offset(1, 0), 9).Value = myLongVariable

Cells(i.Offset(1, 0), 9).Text = myStringVariable

和其他变体,但我在这一行不断收到溢出错误。

我试过这个:Range("I" & i.Offset(1, 0)).Value = myLongVariable 和细微的变化,但我收到一个错误,上面写着Run-time error 1004: Method Range of object _Worksheet failed

workBook.Sheets("Sheet1").Range("I" & i.Offset(1, 0)).Value = myLongVariable,但这会给出Run-time error 1004: Application-defined or object-defined error。不确定这是指什么,因为我已经定义了 workBookimyLongVariable

作为一种稍微不同的方法,我尝试将变量数据粘贴到该行的下一个空白单元格中,该单元格恰好是 I 列中的单元格。这是我为此使用的代码:'i.Offset(1, 0).End(xlToRight).Offset(0, 1).Value = myLongVariable。它工作得很好,除了在这种情况下:单元格 A1:C1 是空白的,D1:H1 有值。然后它应该将该值粘贴到 I1 中,但它认为 D1 是结束并将其发布到那里。有什么想法吗?

谢谢!

【问题讨论】:

  • 老兄,请校对您的问题,然后将其留给人们回答,尤其是不要更改您要询问的代码!
  • 您的Cells(i.Offset(1, 0), 9) 必须是Cells(i.Row + 1, 9)... 也可以通过.Value 设置字符串...单元格的.Text 属性以不同的方式起作用...请阅读THIS
  • @DirkReichel 请将其作为答案发布,以便我接受

标签: excel vba


【解决方案1】:

只是为了与其他答案不同,您也可以使用这个:

i.Offset(1).EntireRow.Cells(9).Value = myLongVariable
i.Offset(1).EntireRow.Cells(9).Value = myStringVariable

或确保使用正确的列:

i.Offset(1).EntireRow.Columns("I").Value = myWhateverVariable

不过,就像我在评论中所说的 Cells(i.Row + 1, 9) 也可以或 Cells(i.Row + 1, "I") ;)

【讨论】:

    【解决方案2】:

    这里使用偏移量是错误的,因为你没有引用一个单元格,

    我只是一个数字,所以你不能抵消它

    Cells(i.Offset(1, 0), 9).Value = myLongVariable
    Cells(i.Offset(1, 0), 9).Text = myStringVariable
    

    应该是

    Cells(i + 1, 9).Value = myLongVariable
    Cells(i + 1, 9).Value = myStringVariable
    

    【讨论】:

      【解决方案3】:

      这假设 i 是一个范围,因为您在另一个问题中也有过:i.Offset(1,0) 返回一个 Range 对象,而不是一个数字。您在代码中使用它的方式看起来就像您试图将其用作行数。要获取范围的行,只需使用.Row 属性:

      i.Offset(1,0).Row
      i.Row + 1 'same thing 
      

      然后

      Cells(i.Offset(1, 0), 9).Value = myLongVariable
      

      应该是

      Cells(i.Row+1, 9).Value = myLongVariable
      

      下一件事:

       Cells(i.Offset(1, 0), 9).Text = myStringVariable
      

      这与Offset.Text 属性相同。 .Text 属性是只读的,它返回屏幕上显示的字符串。它与值不同,例如,如果单元格太小,它将变为#####。对字符串和数字使用 .Value 属性。


      现在是最后一件事:

      Somecell.End(xlToRight)
      

      End(xlToRight) 查找区域的结尾,这意味着如果单元格为空,则查找空区域的结尾,即下一个包含某些内容的单元格或工作表的结尾。如果单元格不为空,则查找第一个空单元格。你想要的是从右边搜索第一个非空单元格:

      Cells(Somecell.Row,Columns.Count).End(xlToLeft) 'this is the last nonempty cell in the Row of Somecell
      

      您必须向右移动一列才能获得第一个空单元格,例如使用Offset

      【讨论】:

        猜你喜欢
        • 2015-02-07
        • 2017-04-18
        • 1970-01-01
        • 2017-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多