以下行导致我似乎无法调试的错误。错误说“需要对象”,据我所知,我提供了函数和所有方法以及适当的对象。
变量“first”初始化为一个字符串,这一行在For循环中,因此使用了“i”变量。
first = Right(Sheets("Sheet1").Cells(i, 1).Text, Sheets("Sheet1").Cells(i, 1).Text.LastIndexOf(" "))
答案 0 :(得分:1)
.Text
返回String
,String
没有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
会返回实际显示的文字。因此,如果您的单元格包含的数字对于列太大,则会返回####
,例如。