在循环中使用拆分功能不起作用

时间:2015-06-10 12:55:26

标签: excel vba excel-vba

我没有收到以下代码的输出:

Sub spliter()

Dim text As String
Dim a As Integer
Dim name As Variant

Do Until IsEmpty(ActiveCell)
     text = ActiveCell.Value
     name = Split(text, " ")
             For a = 0 To UBound(name)
             Cells(1, a + 1).Value = name(a)


             Next a
    ActiveCell.Offset(1, 0).Select
Loop
End Sub

使用'run to'调试器,我可以看到循环工作正常。这最初是作为分离器子构建的,其中Loop函数被置于其中。分离器子工作正常,1个单元并且单独使用,但是当我合并Loop时,分离器功能什么都不提供。我认为这可能是数组问题中的一个数组。

2 个答案:

答案 0 :(得分:1)

这可以解决你的问题:

Sub spliter()

Dim vText As String, _
    vName() As String, _
    wRow  As Integer

wRow = 1
If IsEmpty(ActiveCell) Or ActiveCell.Value2 = vbNullString Then
    MsgBox "ActiveCell is empty!", vbCritical + vbOKOnly
Else
    Do Until IsEmpty(ActiveCell) Or ActiveCell.Value2 = vbNullString
        vText = ActiveCell.Value
        vName = Split(vText, " ")
           For a = LBound(vName) To UBound(vName)
              Cells(wRow, a + 1).Value = vName(a)
           Next a
        ActiveCell.Offset(1, 0).Activate
        wRow = wRow + 1
    Loop
End If

End Sub

答案 1 :(得分:1)

我不确定您要将数据放在何处 - 您可以从ActiveCell获取数据,该数据可能位于工作表的任何位置,并将其粘贴到同一工作表的第1行。

此代码将获取ActiveCell及其下方的单元格,并按空格分割文本字符串,并将每个单词放在原始句子旁边。

Sub Splitter()

Dim sText As String
Dim x As Integer
Dim vName As Variant

Do Until IsEmpty(ActiveCell)
    sText = ActiveCell.Value
    vName = Split(sText, " ")
    ActiveCell.Offset(, 1).Resize(, UBound(vName) + 1) = vName
    ActiveCell.Offset(1, 0).Select
Loop

End Sub