Как динамически читать строки макросов VBA из тела документа во время выполнения? - PullRequest
0 голосов
/ 08 июля 2019

VBA выдает ошибки, когда я пытаюсь переместить строки в тело документа и ссылаться на них.

Пример того, что я пытаюсь сделать. Рассмотрим следующий макрос:

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

Я пытаюсь переместить строки, такие как «WScript.Shell» и «C: \ Windows \ system32 \ notepad.exe», в текст документа Word, например в текстовое поле.

Public Function Foo()
    Dim WScript As String
    WScript = ActiveDocument.Shapes("Text Box 1").TextFrame.TextRange.Text
    Set Bar = CreateObject(WScript)
    Dim Notepad As String
    Notepad = ActiveDocument.Shapes("Text Box 2").TextFrame.TextRange.Text
    Bar.Run (Notepad)
End Function

Текстовое поле 1 и Текстовое поле 2 содержат в точности те же строки, что и раньше, и я могу прочитать их с помощью MsgBox (), но теперь макрос завершается ошибкой вызова CreateObject в строке 4 с ошибкой: «Ошибка времени выполнения» 429 ': Компонент ActiveX не может создать объект "

Если я заменяю строку в макросе, чтобы позволить коду пройти через эту точку, и создаю объект ActiveX WScript, я получаю сообщение об ошибке при вызове метода Bar.Run: «Ошибка времени выполнения« 424 »: требуется объект ».

Это заставляет меня думать, что выборка строк во время выполнения невозможна. Кто-нибудь может объяснить, почему это происходит?

1 Ответ

1 голос
/ 08 июля 2019

Возможно, в конце этого текста есть возврат каретки.

Возможно, попробуйте Replace, чтобы устранить его:

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

И аналогично для Notepad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...