我正在编写一个宏,用于将 LDAP 格式的名称列表转换为名字、姓氏(区域)。
对于那些不知道 LDAP 是什么样子的人,如下所示:
CN=John Smith (region),OU=Legal,DC=example,DC=comand
在 Excel VBA 中,我似乎无法使用 string.substring(start, end)。在 Google 上的搜索似乎表明 Mid(string, start, end) 是最佳选择。
问题是这样的:在Mid中,end的整数是距start的距离,而不是字符的实际索引位置。这意味着不同的名称大小将具有不同的结束位置,并且我无法使用“)”索引来查找该区域的结束位置。由于所有名称都以 CN= 开头,因此我可以正确找到第一个子字符串的结尾,但无法正确找到“)”,因为名称长度不同。
我有一些代码如下:
mgrSub1 = Mid(mgrVal, InStr(1, mgrVal, "=") + 1, InStr(1, mgrVal, "\") - 4)
mgrSub2 = Mid(mgrVal, InStr(1, mgrVal, ","), InStr(1, mgrVal, ")") - 10)
manager = mgrSub1 & mgrSub2
有没有办法使用设定的终点而不是距离起点有这么多值的终点?
最佳答案
这是 vba.. 没有 string.substring ;)
这更像是VB 6(或以下任何一个)..所以你被mid,instr,len(获取字符串的总len)所困。我认为你错过了len来获取字符总数在一个字符串中?如果您需要一些说明,请发表评论。
编辑:
另一个快速破解..
Dim t As String
t = "CN=Smith, John (region),OU=Legal,DC=example,DC=comand"
Dim s1 As String
Dim textstart As Integer
Dim textend As Integer
textstart = InStr(1, t, "CN=", vbTextCompare) + 3
textend = InStr(1, t, "(", vbTextCompare)
s1 = Mid(t, textstart, textend - textstart)
MsgBox s1
textstart = InStr(1, t, "(", vbTextCompare) + 1
textend = InStr(1, t, ")", vbTextCompare)
s2 = Mid(t, textstart, textend - textstart)
MsgBox s2
显然你的问题是,由于你需要第二个参数的差异,你应该总是为它做一些数学计算......
关于excel - 从文本中解析子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9948260/