Почему код VBA открывает файл R вместо запуска кода - PullRequest
0 голосов
/ 26 октября 2018

У меня есть макрос VBA в Excel, который вызывает код R. Кнопка VBA открывает только файл R вместо того, чтобы также запускать код. Вот код:

Sub RunRscript()
Dim shell As Object
Set shell = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 1
Dim errorCode As Integer
Dim path As String
path = "C:\Users\user\Documents\Forecast.R"
errorCode = shell.Run(path, style, waitTillComplete)
End Sub

Код R в конечном итоге создает новый документ Excel после его запуска. Я хочу, чтобы кнопка запустила код R и создала этот новый документ. Если я просто запускаю код R отдельно, он работает нормально. Мне интересно, что мне нужно добавить к этому коду, чтобы R-файл фактически работал, а не только открывался.

1 Ответ

0 голосов
/ 03 февраля 2019
VBA.CreateObject("WScript.Shell").run(...)

В основном будет запускать все, что указано в сегменте ..., из командной строки Windows. Это эквивалентно запуску пакетного сценария или сценария powershell. (нажмите «Пуск», введите cmd и запустите код из командной строки)

По умолчанию каждый тип документа имеет несколько способов открытия по умолчанию. Папки, файлы и т. Д. Часто открываются в некоторых средствах просмотра. Передача каталога в R-файл будет выполнять то же действие, что и двойной щелчок по нему.

Чтобы запустить его как скрипт, вам нужно будет открыть его через исполняемый файл R Rscript.exe. Каталог по умолчанию указан в

C:\Program Files\R\R-3.5.1\bin

Чаще всего это делается путем создания переменной окружения для этого каталога, после чего вы можете запустить rscript через

path = "Rscript [fullpath to R file] [Arguments]"
VBA.CreateObject("WScript.Shell").run(path)

Для справки, как установить этот путь, пожалуйста, ознакомьтесь с отличным руководством java здесь: Как установить или изменить системную переменную PATH?

Если вы хотите избежать этого, вы можете просто запустить скрипт, напрямую указав полный путь к исполняемому файлу rscript

path = """C:\Program Files\R\R-3.5.1\bin\Rscript.exe"" ""C:\Users\user\Documents\Forecast.R"""
VBA.CreateObject("WScript.Shell").run(path)

В этом случае двойные кавычки кажутся необходимыми.

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