【问题标题】:Split text in column into words and print them in another column将列中的文本拆分为单词并在另一列中打印
【发布时间】:2017-09-19 16:53:35
【问题描述】:

这个问题似乎被问了很多次,但我对此感到有些麻烦。该任务在列(假设为 A 列)中给出了一些单元格,在每个单元格中拆分文本(分隔符是空格“”)并在另一列(假设为 C 列)中打印所有获得的单词。

在阅读了一些答案后,我编写了以下代码:

Sub splitting()

Dim tmp As Collection
Dim i As Integer, j As Integer

For i = 0 To 3
   tmp.Add split(Cells(i + 1, 1).Value, " ")
Next i

For j = 0 To tmp.Count
    Cells(j + 1, 3).Value = tmp(j)
Next j

End Sub

这里我使用集合而不是数组来具有动态重新排列的能力(每次循环添加新项目)。我还假设文本仅在前四行中进行测试。

它给了我一个错误

运行时错误“91”:未设置对象变量或带块变量

我做错了什么,我应该如何以正确的方式做?

【问题讨论】:

  • 也许你忘了Set tmp = new collection ?
  • 哪一行给出了错误
  • 集合索引从 1 开始,而不是 0。错误在这里:tmp(j)
  • 从 1 开始循环并删除 +1。所有都将被排序。
  • 集合中的每个项目都包含一个列表,因此除了循环​​遍历集合之外,您还需要一个内部循环来获取列表的项目。

标签: vba excel split


【解决方案1】:

要总结 cmets 中提到的所有问题,请参见下面的示例:

输入:

one two three four five 
six seven eight nine 
ten eleven twelve


Sub splitting()

    Dim tmp As Collection
    Dim i As Integer, j As Integer, k As Integer

    Set tmp = New Collection

    For i = 1 To 3
       tmp.Add Split(Cells(i, 1).Value, " ")
    Next i

    For j = 1 To tmp.Count
        For k = 0 To UBound(tmp(j))
            Debug.Print tmp(j)(k)
        Next k
    Next j
End Sub

输出:

one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve

【讨论】:

    【解决方案2】:

    您的集合已声明但未初始化。尝试更改为:

    Dim tmp As New Collection
    

    【讨论】:

    • 这称为自动实例化,应该避免。对象并没有真正创建,而是在代码中第一次遇到它时创建。
    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多