我在这里或希望理解的问题是,从程序的角度看,单元格中的字符似乎在宏产生的值之间发生了变化,然后双击该单元格(可能是可怕的解释)。为了进一步解释,我有一个宏,它提取可变的段落大小的字符串,并将它们放在给定范围内的每个单元格中。我尝试做的下一件事是在新产生的范围上使用另一个宏来删除多余的换行符(2个以上连续的换行符)。出于任何原因,该宏都会失败,并且似乎无法解释换行符。一旦我在一个单元格内手动双击,直到出现文本光标的位置,然后离开该单元格以运行换行宏,它便能够检测到换行符。
这是怎么回事?在双击单元格之前,字符是否具有不同的uni-code值或其他值?尝试仅从宏生成单元格文本时,也尝试分析单元格的其他单词时遇到类似的问题。
答案 0 :(得分:2)
我怀疑您所说的换行符是回车符ASCII13。当您在单元格中手动输入回车符时,excel会将其转换为换行符(ASCII 10)。阅读完您的问题后,我通过在单元格A1中输入公式“ = CHAR(13)”进行了验证,然后将其值复制并粘贴到适当的位置。我在单元格A2中输入了公式“ = CODE(A1)”,以评估A1中字符的ASCII码(此时为13)。然后,我双击进入A1,然后按Enter键(猜测是什么?),该字符被更改为换行符(ASCII 10)。我怀疑CHAR(11)也会发生同样的情况,但事实并非如此。
为解决您的问题,建议您首先使用类似的方式将Chr(13)
的所有出现转换为Chr(10)
MyString = Replace(MyString, Chr(13), Chr(10))
' and if it were me, I would also add (just in case)
MyString = Replace(MyString, Chr(11), Chr(10))
以我的经验,某些程序(例如,如果我没记错的话,访问报告)需要一系列Chr(10) & Chr(13)
(或者相反)来在报告中实际显示新行,因此,如果拉一个段落看起来有2个换行符,那么要实现这一点的实际字符串将是Chr(10) & Chr(13) & Chr(10) & Chr(13)
,在excel中,您最终得到4个换行符。希望这会有所帮助。
编辑:
万一这种情况仍然存在,我将使用以下方法来调试情况:打印所有字符及其值,并在引起此类问题的地方读取字符代码(未经测试的代码):
Dim s As String
Dim i as Integer
For i = 1 to Len(MyString)
s = Mid$(MyString, i, 1)
Debug.Print s & ", " & Asc(s) 'Or perhaps AscW(s) for unicode
Next i