如何在运行时从文档主体动态读取VBA宏字符串?

时间:2019-07-08 03:32:19

标签: vba ms-word

当我尝试将字符串移动到文档正文并引用它们时,VBA出现错误。

我想做的事的一个例子。考虑以下宏:

for result in results:
    title = result.find('a', class_="result-title").text
    price = result.a.span.text
    link = result.a['href']

    try:
        if int(price) >= 2_000:
            continue
    except ValueError:
        continue


    if all(price, title, link):
        print('-------------')
        print(title, price, link, sep='\n')

我试图将诸如“ WScript.Shell”和“ C:\ Windows \ system32 \ notepad.exe”之类的字符串移至Word文档的正文中,例如在文本框中。

Public Function Foo() As Variant
    Set Bar = CreateObject("WScript.Shell")
    Bar.Run ("C:\Windows\system32\notepad.exe")
End Function

文本框1和文本框2包含与以前完全相同的字符串,我可以使用MsgBox()读取它们,但是现在宏在第4行的CreateObject调用失败,并显示以下错误:“运行时错误'429 ':ActiveX组件无法创建对象”

如果将字符串替换到宏中以使代码运行到这一点并创建WScript ActiveX对象,则在调用Bar.Run方法时收到错误消息:“运行时错误'424':必需对象”。

这使我认为在运行时获取字符串是不可能的。谁能解释为什么会这样?

1 个答案:

答案 0 :(得分:1)

该文本的末尾可能会有回车符。

也许尝试使用Replace来消除它:

WScript = ActiveDocument.Shapes("Text Box 1").TextFrame.TextRange.Text
WScript = Replace(WScript, Chr(13), "")

Notepad也是如此。