Макрос переименования листа не будет работать при запуске с помощью Powershell

#excel #vba #powershell

#excel #vba #powershell

Вопрос:

У меня есть макрос, который форматирует столбцы и переименовывает лист (1) в Sales — лист имеет разное название каждый месяц, например, Sales (январь), Sales (февраль) и т.д.

 Columns("P").NumberFormat = "0.00"
Columns("Q").NumberFormat = "0.00"
Columns("R").NumberFormat = "0.00"
Columns("T").NumberFormat = "ddmmyyyy"
Columns("U").NumberFormat = "0.0"
Sheets(1).Select
Sheets(1).Name = "Sales"
  

Я могу запустить макрос вручную, и он работает нормально, но когда я пытаюсь использовать Powershell

 $File = Get-ChildItem 'C:UsersusernameCleanSales*.xlsx'

$XLSB = 'C:UsersusernameCleanPERSONAL.XLSB'


function Sales 
{
        $excel = New-Object -comobject Excel.Application
        $wbPersonalXLSB = $excel.workbooks.open($XLSB)
        $workbook = $excel.Workbooks.Open($File)
        $excel.Visible = $false
        $worksheet = $workbook.worksheets.item(1)
        $app = $excel.Application
        $app.Run("PERSONAL.xlsb!MACRO")
        $wbPersonalXLSB.Close()
        $workbook.save()
        $workbook.close()
        $excel.Quit()
  

форматирование изменено, однако название листа не меняется.
Если я удалю таблицу переименования, powershell будет работать нормально

 Sheets(1).Select
Sheets(1).Name = "Sales"
  

есть ли что-то, чего мне не хватает?

Комментарии:

1. Вам не нужно выбирать лист, чтобы назвать его

2. хорошо, я удалил лист выбора и снова проделал то же самое. Это работает, если я запускаю макрос вручную, но в сочетании с powershell он не переименовывает лист.

3. Попробуйте сделать Excel видимым, чтобы вы могли видеть, что происходит.

4. Также стоило бы пересмотреть ваш макрос, чтобы он не зависел от ActiveWorkbook, например. вы можете передать имя книги, с которой вы хотите, чтобы она работала.

5. поэтому я сделал это видимым, чтобы не закрывать и не выходить. Он снова отформатировал столбцы, но не переименовал лист