问题描述
我正在编写一个宏,它使用LDAP格式的名称列表将它们转换为First,Last(region)。对于那些不了解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&有谁知道一个实际使用一个终点而不是一个终点的方法,这么多的价值观远离一开始? 解决方案这是vba .. no string.substring;)
这更像是VB 6(或下面的任何一个)..所以你被卡在中间,instr,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 =中(t,textstart,textend - textstart)
MsgBox s2
很明显,你的问题是,由于您需要第二个参数的差异,因此您应该总是为此做一些数学计算。 ..
I am writing a macro that takes a list of names that are in an LDAP format converts them to First, Last (region). For those of you that do not know what LDAP looks like, it is below:
CN=John Smith (region),OU=Legal,DC=example,DC=comand
In Excel VBA, I do not appear to be able to use string.substring(start, end). A search on Google seems to reveal that Mid(string, start, end) is the best option. The problem is this: in Mid, the integer for end is the distance from start, not the actual index location of the character. This means that different name sizes will have different ending locations and I cannot use index of ")" to find the end of the region. Since all of the names start with CN=, I can find the end of the first substring properly, but I cannot find ")" properly because names are different lengths.
I have some code below:
mgrSub1 = Mid(mgrVal, InStr(1, mgrVal, "=") + 1, InStr(1, mgrVal, "\") - 4)
mgrSub2 = Mid(mgrVal, InStr(1, mgrVal, ","), InStr(1, mgrVal, ")") - 10)
manager = mgrSub1 & mgrSub2
Does anyone know of a way to actually use a set end point instead of an end point that is so many values away from the start?
解决方案 This is vba.. no string.substring ;)
this is more like VB 6 (or any one below).. so you are stuck with mid, instr, len (to get the total len of a string).. I think you missed len to get the total of chars in a string? If you need some clarification just post a comment.
edit:
Another quick hack..
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
Clearly your problem is that since you need a diference for the second parameter, you should always do some math for it...
这篇关于Excel VBA子字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!