gpt4 book ai didi

vba - VBS InStr 的问题 - 使用嵌套的 InStr 作为可选的开始参数

转载 作者:行者123 更新时间:2023-12-04 20:42:41 24 4
gpt4 key购买 nike

大家早上好...我需要一些帮助将功能从 VBA 移植到 VBS

这是我的问题所基于的数据集的示例。

USA_66544_File.doc
RUS_3465_File.txt

我使用该函数提取两个下划线之间的数字字符串。万一这很重要,我首先根据下划线将字符串分成几段,然后将它们拼凑在一起以隔离我想要的字符串。
=MID(A5,FIND("_",A5)+1,FIND("_",A5,FIND("_",A5)+1)-FIND("_",A5)-1) '##original working in Excel

上面的输出将分别为 66544 和 3465。

然后我需要将此功能移植到 VBS。 MID 没问题,但 FIND 更改为 InStr。此外,我的单元格引用 (A5) 更改为大小为 array(1,7) 的二维数组
MID(array(0,x),InStr(array(0,x),"_")+1,InStr(InStr(array(0,x),"_")+1),array(0,x),"_")'-(Instr(array(0,x),"_")-1)

我收到错误“参数数量错误或属性分配无效”。

这就是我认为我正在做的事情。 MID 接受三个参数,最后一个是可选的。
MID(string, start, [# of char to return]
  • 字符串 = 数组(0,x)
  • start = InStr(array(0,x),"_")+1 (这应该找到一个下划线,
    然后返回下一个数字)
  • 长度 =
    Instr(Instr(array(0,x),""),array(0,x),"")-Instr(array(0,x),"_")-1

  • 因此,为了以防万一,在我的二维数组中,第一个维度将包含完整的字符串
    USA_66544_File.doc
    RUS_3465_File.txt

    第二,函数的输出
    66544
    3465

    我任何人都可以帮助我理解这一点,我将不胜感激。
    谢谢,
    草本植物

    最佳答案

    简单的解决方案是使用 Split():

    >> Dim array(0,0)
    >> array(0,0) = "USA_66544_File.doc"
    >> WScript.Echo array(0,0), Split(array(0,0), "_")(1)
    >>
    USA_66544_File.doc 66544

    我使用了变量名 array在这个演示中,因为我想确保重新/误用 Array() 的名称函数不会抛出错误。仍然建议选择一个更好的名称。

    如果要使用 Mid() 和 Instr(),请逐步执行:
    >> s = "USA_66544_File.doc"
    >> f = InStr(1, s, "_") + 1
    >> t = InStr(f, s, "_")
    >> l = t - f
    >> WScript.Echo Mid(s, f, l)
    >>
    66544

    正确完成后,优化很容易:
    >> s = "USA_66544_File.doc"
    >> f = InStr(1, s, "_") + 1
    >> WScript.Echo Mid(s, f, InStr(f, s, "_") - f)
    >>
    66544

    内联 f(即重复表达式)肯定不会是一种优化,特别是如果您考虑需要添加一些错误检查。

    关于vba - VBS InStr 的问题 - 使用嵌套的 InStr 作为可选的开始参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800713/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com