String.Right函数运行时错误'424':需要对象

时间:2016-10-16 17:49:13

标签: vba excel-vba excel

以下行导致我似乎无法调试的错误。错误说“需要对象”,据我所知,我提供了函数和所有方法以及适当的对象。

变量“first”初始化为一个字符串,这一行在For循环中,因此使用了“i”变量。

first = Right(Sheets("Sheet1").Cells(i, 1).Text, Sheets("Sheet1").Cells(i, 1).Text.LastIndexOf(" "))

1 个答案:

答案 0 :(得分:1)

.Text返回StringString没有LastIndexOf属性。实际上,它没有任何属性,因为它不是一个对象。这就是你得到“需要对象”的原因。你想要的是

InStrRev(someString, " ")

InStr函数为您提供搜索字符串第一次出现的索引,而InStrRev给出最后一个。所以这可以解决你当前的问题:

Dim cellCont As String
'...
cellCont = Sheets("Sheet1").Cells(i, 1).Value2 'use value or value2, not text
first = Right(cellCont, InStrRev(cellCont, " "))

但是你可能想要最后一个空格字符的右边部分,所以你需要字符串右边部分的长度,但是InStrRev会给你左边部分的长度。所以你必须从总长度中减去空间的位置。

first = Right(cellCont, Len(cellCont) - InStrRev(cellCont, " "))

另一个选项是返回数组的Split函数:

first = Split(cellCont, " ")(UBound(Split(cellCont, " ")))

如果你事先知道了单词的数量,那么它会看起来更漂亮,比如

first = Split(cellCont, " ")(2)

修改:为什么要使用Value(或Value2)代替.Text.Text会返回实际显示的文字。因此,如果您的单元格包含的数字对于列太大,则会返回####,例如。