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

Jos*_*osh 9 csv excel vba

我在Excel 2003中使用VBA.这是我遇到的问题最简单的例子.我想只用逗号将一个字符串拆分成行中的单元格.

在Cell A1中,我有以下字符串:

A B,C
Run Code Online (Sandbox Code Playgroud)

在VBA中,如果我说Range("A1").TextToColumns Comma:=True,Space:=False,它会做我期望的.单元格A1是A B,单元格B1是C

但如果我有这个字符串:

A B C,D
Run Code Online (Sandbox Code Playgroud)

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

TextToColumns当有多个空格时,为什么会自动按空格分割,即使我明确告诉它不要?这是一个已知的错误?有没有解决方法,除了自己手动将字符串解析为列?

Jea*_*ett 7

您希望显式设置DataTypexlDelimited,否则Excel假定您的数据按固定宽度列排列,而Excel初始猜测这些列的宽度是空格所在的位置 - 忽略您在参数列表中选择的任何分隔符.

尝试以下操作,您将看到它重现您的结果:

Range("A1").TextToColumns DataType:=xlFixedWidth
Run Code Online (Sandbox Code Playgroud)

这给出了与省略DataType参数相同的结果:

Range("A1").TextToColumns
Run Code Online (Sandbox Code Playgroud)

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

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

Range("A1").TextToColumns DataType:=xlDelimited, Comma:=True, Space:=False
Run Code Online (Sandbox Code Playgroud)

编辑它看起来比Excel文档可能有点错误.这实际上闻起来像Excel-VBA中的一个错误.请参阅以下评论中的讨论.