告诉Excel VBA TextToColumns不要用空格分隔

我在Excel 2003中使用VBA。这是我遇到的问题的最简单的例子。 我想只用逗号分割一个string,将其放入行中的单元格中。

在单元格A1中,我有以下string:

AB,C 

在VBA中,如果我说Range("A1").TextToColumns Comma:=True,Space:=False ,它符合我的期望。 单元格A1是AB ,单元格B1是C

但是,如果我有这个string:

 ABC,D 

那么如果我使用Range("A1").TextToColumns Comma:=True,Space:=False ,无论如何它会被Range("A1").TextToColumns Comma:=True,Space:=False分割! 单元格A1是A ,单元格B1是B ,单元格C1是C,D (?!)

为什么TextToColumns在有多个空格时会自动按空格拆分,即使我明确地告诉它不要? 这是一个已知的错误? 有没有解决方法,而不是自己手动parsingstring到列?

你想显式地将DataType设置为xlDelimited ,否则Excel会假定你的数据是按固定宽度的列排列的,而Excel对这些列有多宽的初始猜测就是空格的位置 – 忽略你在参数列表中select的任何分隔符。

尝试以下,你会看到它重现你的结果:

 Range("A1").TextToColumns DataType:=xlFixedWidth 

这与删除DataType参数的结果相同:

 Range("A1").TextToColumns 

请注意,Excel文档在这方面是错误的:它说xlDelimited是默认的,但显然xlFixedWidth是现实中的默认值。

所以,长话短说,你想要的是这样的:

 Range("A1").TextToColumns DataType:=xlDelimited, Comma:=True, Space:=False 

编辑它看起来像一个多一点的Excel文档可能是错的。 这实际上就像Excel-VBA中的一个bug。 请参阅下面的评论中的讨论。

ConsecutiveDelimiter设置为True

Range("A1").TextToColumns ,,,True,,,True,False