excel - 从文本中解析子字符串

标签 excel vba ldap substring

我正在编写一个宏,用于将 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/

相关文章:

python - 我无法安装 python-ldap

ldap - LDAP 专有名称有多长(最大字符数)?

excel - 将链接图像转换为嵌入图像

c# - 检查 Excel 文件是否在 .NET Core 中受密码保护

r - 如何编写R来循环设置目录中每个文件的每个工作表

visual-studio - 在哪里可以找到 MS Word 的 VBA api 文档

excel - 适用于 Office Excel 2007 的 VBA 版本 7 的免费教程网站

database - Access VBA : Error 2501 - The OpenQuery action was cancelled

php - 单点登录 (SSO) 如何使用 PHP + Apache 针对 Active Directory 进行透明身份验证?

Excel公式用于A,B,C分组并查找第一次出现?