字符串中的空格与非空格

3
我在Excel中有一个单元格,它是从Outlook中粘贴过来的。当我在中读取时,上面有一些空格,我需要将其删除。 我花了几个小时才找到解决方法来去掉这些空格。
我尝试了:
- Replace(string_value," ",""),但没有去掉空格 - Application.find(" ", string_value),返回错误 - Application.trim(string_value),但没有去掉空格 ...
我的解决方案:
string_value = Replace(Str(string_value), " ", "")

有人知道为什么吗?


1
你能展示一下你的 string_value 变量的声明吗?我有一个想法,但需要确认一下。 - RubberDuck
@RubberDuck 的观点很有道理,如果我的想法和他的一样,我认为你正在获取一个完整的HTML字符串。请查看我的答案以获取更多关于我认为发生了什么的细节。如果您可以展示一下如何给变量赋值,那就太好了。 - Matteo NNZ
3个回答

1

Outlook邮件可以有两种写作模式:

1)纯文本;

2)HTML(用于允许颜色、布局等)。

您可能使用的是第二种情况,因为在纯文本模式下无法插入表格,并且当您获取变量string_value的值时,您会得到完整的HTML字符串。

实际上,Outlook将您的正文转换为HTML,以便从任何邮件服务器查看(HTML是国际Web语言,几乎可以由任何浏览器统一阅读)。这意味着,字符空格将不再是" ",而是其HTML等效项,即&nbsp(或其他某些内容,我不知道是否有断行符,我不是HTML的真正专家)。

因此,当您使用上述三种方法之一时,它们都无法找到“可视空间”,或者更好地说是字符串字符" "。但是,当您使用函数Str()时,HTML字符串将被重新转换为VBA语言(即&nbsp或等效项将转换为" "),因此您的方法将起作用。


0

那是因为这个语句:

string_value = Replace(Str(string_value), " ", "")

这段代码实现了几个功能。通常情况下,str()需要一个Long参数。因为你提供的是一个String,VBA(在后台)将字符串转换为Long。在此过程中,它会丢弃任何垃圾字符(非数字),例如CHR(160)。

Str()用空格填充结果,而Replace()则将其删除!

MSDN上的Str函数


-1
使用: Replace(string_value,CHAR(160),"")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接