Excel VBA-粘贴变量';将值放入单元格中
我有一个For循环,它将找到一个包含特定值的单元格(例如单词“Item”)。一旦它找到这个单元格,我想将一个值粘贴到它下面的第I列的行中 例如,如果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
循环在单元格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,请将其作为答案发布,以便我可以接受