在Sheet1中,单元格A1我有以下文字:A-B-C-D-E-F
我需要遍历此文本,并编写了以下可正常运行的代码:
dim w as worksheet
dim s as variant
dim p as integer
set w = Worksheets(1)
p = 0
For Each s In Split(w.Range("A1").Value, "-")
p = p + 1
MsgBox Split(w.Range("A1").Value, "-")(p - 1)
Next s
上面的代码弹出消息框,按预期一个接一个地显示每个字母。
但我对Split的重复感到不满(w.Range(" A1")。值," - "),再次声明数组循环对于循环中的每一次出现。
所以我尝试过:
MsgBox s.Value
但它会引发有关被请求对象的错误。
为什么我不能使用Value属性给出" s"是变种?
答案 0 :(得分:2)
Split
返回一个字符串数组,该数组由For Each
分隔为个别字符串,因此您可以按原样将它们传递给MsgBox
。
因此,不要使用s.Value
,而是单独使用s
。
换句话说:
dim w as Worksheet
dim s as Variant
set w = Worksheets(1)
For Each s In Split(w.Range("A1").Value, "-")
MsgBox s
Next
答案 1 :(得分:1)
你可以这样做
dim w as worksheet
dim s as string
set w = Worksheets(1)
For Each s In Split(w.Range("A1").Value, "-")
MsgBox s
Next
当您将任何对象分配给变体时,它的行为类似于分配给它的对象,并且只具有对象中存在的那些属性。在For Each split中,您将字符串赋值给s,字符串变量直接返回它们的值而不是objString.Value。