【问题标题】:Split command in Excel VBA adding a space between every character in arrayExcel VBA中的拆分命令在数组中的每个字符之间添加一个空格
【发布时间】:2017-12-06 10:20:49
【问题描述】:

我正在读取一个文本文件并使用以下代码在每个空格处拆分数据字符串。

 L = f.ReadLine
        If L = "" Then GoTo errorpoint:
            On Error GoTo errorpoint:
            sl = Split(L, " ", -1)

但是,我返回的数组例如将文本文件中的单词“Contact”转换为我数组的单个单元格中的“C o n t a c t”(见下文),我不知道为什么.

VBA 观察窗口中的数据输出:

我尝试过使用

For i = 0 To UBound(sl)
     sl(i) = Replace(sl(i), " ", "")
Next

之后删除空格,但这似乎并没有从我的数据中删除空格。有什么想法可以防止代码首先在每个字符之间添加空格吗?

然后我需要检查sl(1)sl(2)是否分别包含“联系”和“压力”这两个词,但目前无法满足该条件,单元格包含“C o n t a c t”和“S t r e s s”,所以我更改了 if 循环以反映这一点,但仍然不满足条件。

此外,由于格式不寻常,我无法从 String > Double 转换我的数据。

【问题讨论】:

  • 值得指出的是,我正在使用 excel VBA 调试菜单中的“添加手表”查看数组中的值。是否有可能我的数据实际上很好,但调试控制台以奇怪的方式显示?
  • 那不行,我得到类型不匹配的错误。
  • 让我猜猜:您的文本文件是 UTF-16 编码的。您的“联系人”实际上是“C[NULL]O[NULL]...”。然后您需要使用 FileSystemObject 读取文件并设置 TriState=True...
  • @LocEngineer 是的!谢谢你。在我的工作站上,我没有 Notepad++,所以我什至没有想到这个想法。但是我尝试从每个数组条目中删除 ASCII 空字符并解决了问题。

标签: arrays excel vba split


【解决方案1】:

正如@LocEngineer 在 cmets 中指出的那样,在更新生成我正在阅读的文本文件的外部软件期间,文本编码已更改为 UTF-16,我的数据之间的附加字符为 chr(0) ASCII 表中的空值,而不是空格(ASCII 中的 chr(32))。

For i = 0 To UBound(sl)
     sl(i) = Replace(sl(i), Chr(0), "")
Next

这个 sn-p 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多