Excel VBA – 将variables的值粘贴到单元格中
我有一个For
循环将find一个具有一定的值的单元格(例如单词“Item”)。 一旦find这个单元格,我想在第一列的下面一行粘贴一个值。
例如,如果For
循环在单元格A1中find“Item”,我想将一个variables的值粘贴到单元格I2中。
我想能够用一个Long
variables和一个String
variables来做到这一点。
现在我正在尝试类似于:
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
。 不知道是什么,因为我已经定义了工作workBook
和i
和myLongVariable
。
作为一个稍微不同的方法,我试着将variables数据粘贴到行的下一个空白单元格中,恰好是列I中的单元格。下面是我使用的代码: 'i.Offset(1, 0).End(xlToRight).Offset(0, 1).Value = myLongVariable
。 它工作得很好,除了在这种情况下:单元格A1:C1是空白的,D1:H1有值。 它应该粘贴到I1的价值,但它认为D1是结束,并张贴在那里。 任何想法呢?
谢谢!
只是为了不同于其他的答案,你也可以使用这个:
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")
;)
它在这里使用偏移是错误的,因为你没有引用一个单元格,
我只是一个数字,所以你不能抵消它
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
这假设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
属性是只读的,并返回屏幕上显示的string。 例如,如果单元格太小,它会变成#####
。 使用string的.Value
属性以及数字。
现在最后一件事情是:
Somecell.End(xlToRight)
End(xlToRight)
查找区域的末尾,这意味着如果单元格为空,它将查找空白区域的末尾,这是包含某个内容的下一个单元格或工作表的末尾。 如果单元格不是空的,它会查找第一个空单元格。 你想要的是从右边search第一个非空单元格:
Cells(Somecell.Row,Columns.Count).End(xlToLeft) 'this is the last nonempty cell in the Row of Somecell
您必须向右移动一列以获得第一个空单元格,例如使用Offset
。