Excel VBA-粘贴变量';将值放入单元格中

Excel VBA-粘贴变量';将值放入单元格中,excel,vba,Excel,Vba,我有一个For循环,它将找到一个包含特定值的单元格(例如单词“Item”)。一旦它找到这个单元格,我想将一个值粘贴到它下面的第I列的行中 例如,如果For循环在单元格A1中找到“Item”,我想将变量的值粘贴到单元格I2中 我希望能够使用Long变量和String变量来实现这一点 现在,我正在尝试类似于: Cells(i.Offset(1, 0), 9).Value = myLongVariable 或 和其他变体,但我一直在这一行得到溢出错误 我尝试了以下方法:Range(“I”&I.Off

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

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

我希望能够使用
Long
变量和
String
变量来实现这一点

现在,我正在尝试类似于:

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

和其他变体,但我一直在这一行得到溢出错误

我尝试了以下方法:
Range(“I”&I.Offset(1,0)).Value=myLongVariable
和一些细微的变化,但我得到一个错误,上面写着
运行时错误1004:对象的方法范围\u工作表失败

workBook.Sheets(“Sheet1”).Range(“I”&I.Offset(1,0)).Value=myLongVariable
,但这会导致
运行时错误1004:应用程序定义或对象定义错误
。因为我已经定义了
工作簿
I
myLongVariable
,所以不确定它指的是什么

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


谢谢

此处使用偏移量是错误的,因为您没有引用单元格

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

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
Cells(i.Row+1, 9).Value = myLongVariable

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

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

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
Cells(i.Row+1, 9).Value = myLongVariable

为了与其他答案不同,您也可以使用以下选项:

i.Offset(1).EntireRow.Cells(9).Value = myLongVariable
i.Offset(1).EntireRow.Cells(9).Value = myStringVariable
或确保使用正确的列:

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

不过,正如我在评论中所说的,单元格(i.Row+1,9)也是可能的,或者单元格(i.Row+1,“i”);)

为了与其他答案不同,您也可以使用以下选项:

i.Offset(1).EntireRow.Cells(9).Value = myLongVariable
i.Offset(1).EntireRow.Cells(9).Value = myStringVariable
或确保使用正确的列:

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

不过,正如我在评论中所说的,单元格(i.Row+1,9)也是可能的,或者单元格(i.Row+1,“i”);)

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

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

应该是

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

下一件事:

 Cells(i.Offset(1, 0), 9).Text = myStringVariable
这与
偏移量
相同,但
.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

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

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

应该是

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

下一件事:

 Cells(i.Offset(1, 0), 9).Text = myStringVariable
这与
偏移量
相同,但
.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

都德,请校对你的问题,然后留给别人回答,尤其是不要更改你要问的代码!您的
单元格(i.Offset(1,0,9)
需要是
单元格(i.Row+1,9)
。。。还可以通过
.Value
设置字符串。。。单元格的
.Text
属性的作用方式不同。。。请阅读@DirkReichel请将其作为答案发布,这样我就可以接受了,伙计,请校对你的问题,然后留给别人回答,尤其是不要更改你所问的代码!您的
单元格(i.Offset(1,0,9)
需要是
单元格(i.Row+1,9)
。。。还可以通过
.Value
设置字符串。。。单元格的
.Text
属性的作用方式不同。。。请阅读@DirkReichel,请将其作为答案发布,以便我可以接受