Excel VBA - 将变量的值粘贴到单元格

时间:2016-06-25 17:59:21

标签: excel vba

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

例如,如果For循环在单元格A1中找到“Item”,我想将变量的值粘贴到单元格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。由于我已定义workBooki以及myLongVariable,因此不确定这是指什么。

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

谢谢!

3 个答案:

答案 0 :(得分:1)

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

我只是一个数字,所以你无法抵消它

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

答案 1 :(得分: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

仍然如我的评论[{1}}中所述,也可以Cells(i.Row + 1, 9);)

答案 2 :(得分:0)

这假定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