Ошибка VBScript Недопустимая или неполная ссылка с методом SendKeys

Я получаю следующую ошибку с моим кодом в файле .vbs:

C:\...\Root_VBS_Script_1.vbs(19, 1) Microsoft
VBScript runtime error: Invalid or unqualified reference

1 was unexpected at this time.

Файл .vbs выглядит следующим образом:

Set wshShell = CreateObject("Wscript.Shell")

Set args = WScript.Arguments
arg1 = args.Item(0)

Dim filename

filename = ""&arg1&""


WshShell.SendKeys "root -b" //opens root in batch mode
WshShell.SendKeys "~"
WshShell.AppActivate ROOT_session
WshShell.SendKeys ".x analysis.C"
wshShell.SendKeys "~"
WshShell.SendKeys ".x double_gaus.C"
WshShell.SendKeys "~"
WshShell.AppActivate ROOT_session
WshShell.SendKeys "c1->SaveAs("&filename&.pdf&")"
WshShell.SendKeys "~"
WshShell.SendKeys ".q"
WshShell.SendKeys "~"

WScript.Quit 1

Я использую метод отправки ключей для запуска программы с именем root (разработанной CERN) из файла .vbs, вызванного из пакетного файла. Я добавляю имя файла в качестве параметра при вызове файла .vbs. Я не уверен, почему я получаю эту ошибку, но я знаю, что метод отправки ключей открывает корень и работает до тех пор, пока он не должен сохранить c1 как заданное имя файла и тип.

Может ли кто-нибудь помочь мне решить эту ошибку?


person Jared    schedule 03.01.2014    source источник


Ответы (1)


Это ваш виновник:

WshShell.SendKeys "c1->SaveAs("&filename&.pdf&")"

Нет переменной .pdf, которую можно было бы объединить. Это даже недопустимое имя переменной из-за ведущей точки. Вы, вероятно, хотели объединить здесь переменную filename со строкой .pdf. Измените строку выше на эту:

WshShell.SendKeys "c1->SaveAs(" & filename & ".pdf)"

В более общем плане: почему вы вообще используете VBScript (и особенно SendKeys)? Если я правильно понимаю документацию, вы можете запускать root скриптов изнутри другие сценарии root, поэтому нет необходимости в другом языке сценариев или ненадежных методах, таких как SendKeys.

person Ansgar Wiechers    schedule 04.01.2014
comment
Спасибо за предложение, я попробую через секунду. Что касается вашего вопроса, я понимаю ненадежность SendKeys, и я знаю, что вы можете иметь сценарии внутри сценариев в корне, но в настоящее время у меня недостаточно опыта, чтобы использовать root для этого, и мне нужен был быстрый способ проанализировать мой текущий набор данных к приближающемуся сроку. В идеале, да, я бы сделал это под root, и скоро я это сделаю. - person Jared; 04.01.2014
comment
В более общем случае эта ошибка возникает при использовании метода в строке, начинающейся с точки, без включения ее в блоки With и End With: docs.microsoft.com /en-us/office/vba/language/reference/ - person AlexLaforge; 06.02.2019