循环通过VBA中的数组

时间:2014-03-20 06:43:15

标签: vba excel-vba excel

在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"是变种?

2 个答案:

答案 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。