Доступ к VBA для записи в файл PS1

Я пытаюсь использовать Access 2016 в качестве внешнего интерфейса для базы данных, которая, когда пользователь нажимает кнопку, создает сценарий Powershell и запускает его.

В настоящее время я использую это:

    Dim Script As String
Script = ("test" & vbCrLf & "2nd line?")
Set f = fileSysObject.OpenTextFile("C:\Users\%Username%\Documents\Access.ps1", True, True)
f.Write Script
f.Close

Затем для запуска сценария, который я использую:

    Dim run
run = Shell("powershell ""C:\Users\%Username%\Documents\Powershell\Access.ps1""", 1)

Я понимаю, что это, вероятно, действительно плохой способ сделать это! Поэтому любая помощь приветствуется!

Спасибо!

РЕДАКТИРОВАТЬ: Извините, вопросов нет!

Проблема в том, что он выделяет ошибку в «f.write Script».

Ошибка компиляции: метод или элемент данных не найден.


person Michael Jones    schedule 24.02.2017    source источник
comment
Я понимаю, что это, вероятно, очень плохой способ сделать это! -- Что заставляет вас так думать? Это вызывает ошибку? Вызывает ли это какое-то другое нежелательное поведение? StackOverflow не очень подходит для таких открытых вопросов; вопросы по теме — это вопросы по конкретной проблеме.   -  person Zev Spitz    schedule 24.02.2017
comment
Помочь с чем? В этом посте нет вопросов.   -  person Mathias R. Jessen    schedule 24.02.2017


Ответы (1)


Формат %VAR% не работает в VBA, вам нужно Environ("VAR")

При этом указанное имя пользователя не возвращает значение с помощью этого метода, но в этом случае вы можете использовать VBA.Environ("Username"):

Dim strScript, strUserName, strFile As String
Dim objFSO, objFile as Object

Set objFSO = CreateObject("Scripting.FileSystemObject")

strScript = ("test" & vbCrLf & "2nd line?")
strUserName = VBA.Environ("Username")
strFile = "C:\Users\" & strUserName & "\Documents\Access.ps1"

Set objFile = objFSO.CreateTextFile(strFile)
objFile.WriteLine strScript
objFile.Close

Set objFSO = Nothing
Set objFile = Nothing
person James C.    schedule 24.02.2017
comment
Script, UsrName в настоящее время определены как Variant. Может быть, определить их как строки. Кроме того, где определены f и filesysObject? - person Ryan Wildry; 24.02.2017
comment
Я предположил, что ОП включил только соответствующие части его сценария, что может быть не так, поэтому я конкретизировал свой ответ до полного кода. - person James C.; 24.02.2017