Как сделать переключатель между способами передачи параметра в функцию: переключатель для [ref]
Для автоматизации обработки документов использую скрипт Powershell и готовые документы Excel,Word с макросами. Пример кода вызывающего нужный макрос:
switch($type) {
'docx'{
$app = new-object -comobject word.application
$doc=$app.Documents
$macros="procedureDoc"
}
'xlsx'{
$app = new-object -comobject excel.application
$doc=$app.Workbooks
$macros="procedureXls"
}
}
$doc.open($macros_file) # открытие документа
$app.run ($macros, $param1) # запуск макроса с передачей параметра
$doc.close # закрытие документа
$app.quit() # закрытие приложения
При передаче параметра в VBA-процедуру в Word нужно использовать [ref]
$app.run ($macros, [ref]$param1) # запуск макроса с передачей параметра
Без этого возникает ошибка:
Аргумент "2" должен быть System.Management.Automation.PSReference. Используйте [ref].
Кроме этого, в одних версиях MS Office нужно использовать эту опцию, а в других - нет.
Как решить задачу: в коде скрипта переопределять класс ref, менять параметр $param1 или др.?
P.S. Код $param1=[ref]$param1 - не рабочий. Можно конечно добавить ещё одну проверку switch, но хотелось бы попроще.
Ответы (1 шт):
Автор решения: Алексей Семенов
→ Ссылка
А если все в switch вставить
PS C:\Users\alHaos> $useRef = $true
PS C:\Users\alHaos> .($useRef ? {Write-Warning "[ref] used"} : {Write-Warning "[ref] not used"})
WARNING: [ref] used
PS C:\Users\alHaos> $useRef = $false
PS C:\Users\alHaos> .($useRef ? {Write-Warning "[ref] used"} : {Write-Warning "[ref] not used"})
WARNING: [ref] not used
PS C:\Users\alHaos>