我正在努力将字符串绑定到Outlook VBA中我需要的内容。 我已经尝试了来自互联网各地的 100 种不同的东西,包括这里。
我使用以下方法:
CString = LTrim$(RTrim$(Mid(itm.Body, InStr(1, itm.Body, CCMark) + Len(CCMark), _
InStr(InStr(1, itm.Body, CCMark) + Len(CCMark), itm.Body, CCMark) - (InStr(1, itm.Body, CCMark) + Len(CCMark)))))
CCMark = "C/">
但是由于电子邮件的正文包含:C/测试 C/,因此变量(CString(转到" 测试 "。
我尝试使用第二个变量与Trim,RTrim,LTrim,Trim$,LTrim$和RTrim$一起使用。 此外,我尝试用双倍空格和单空格替换。 我已经尝试了互联网上流行的 TrimAll 函数,它试图找到不同的 Chr(( 值以及 vbTab 等。 这些似乎都不能取代任何东西。
字符串保持不变。
这是固定长度与可变长度("相当大的"(字符串问题吗? 我还没有找到从固定长度转换为变量的方法。 传递函数不起作用。
关于我如何得出"测试"作为结果的任何建议?
非常感谢您的帮助。
简单地说:VBA中的字符串处理函数确实有效。如果您的字符串在输入字符串的开头或结尾有空格字符(特别是代码点为 32 的字符(,则它们将被删除。
仅当您使用特殊语法专门声明"固定长度"字符串时,它们才存在:
Dim eightCharString As String(8) ' This is a fixed-length string
没有任何 VBA 字符串函数返回固定长度的字符串。因此,除非您使用上述表示法将CString
声明为固定长度的字符串,否则这不是问题所在。
从逻辑上讲,唯一的可能性是你认为是空格的字符实际上不是空格。电子邮件中极有可能的候选项是它们是 HTML 不间断空格字符或代码点0xA0(十进制 160(。到目前为止,替换源字符串中多个字符的最简单方法是使用正则表达式。
这是典型的基于正则表达式的修剪函数。下面构造的两种模式是
Start pattern: "^[u0009u0020u00A0]*"
End pattern: "[u0009u0020u00A0]*$"
如果要查找和删除其他空格字符,只需将其代码点值添加到以下函数的列表中即可。例如,要将换行符和回车符视为要修剪的空格,请将代码点 10 和 13 添加到列表中。
法典:
Private m_RxTrimStart As RegExp
Private m_RxTrimEnd As RegExp
Public Function RxTrim(ByRef Source As String) As String
' Only create and compile the RegExp objects once
If m_RxTrimStart Is Nothing Then
' A verbose way of constructing the regex object so you
' can see exactly what's going on
Dim spaceCodePoints As Variant, vCodePoint
Dim strSpaceClass As String, strHexPoint As String
' Add additional code points here if desired
spaceCodePoints = Array(9, 32, 160)
strSpaceClass = "["
For Each vCodePoint In spaceCodePoints
' Assemble a four-character hex code point
strHexPoint = Hex$(CLng(vCodePoint))
strHexPoint = String("0", 4 - Len(strHexPoint)) & strHexPoint
strSpaceClass = strSpaceClass & "u" & strHexPoint
Next
strSpaceClass = strSpaceClass & "]*"
' Start anchor + spaces character class
Set m_RxTrimStart = New RegExp
m_RxTrimStart.Pattern = "^" & strSpaceClass
' Spaces character class + end anchor
Set m_RxTrimEnd = New RegExp
m_RxTrimEnd.Pattern = strSpaceClass & "$"
End If
RxTrim = m_RxTrimEnd.Replace(m_RxTrimStart.Replace(Source, ""), "")
End Function