Почему Excel выдает «Ошибка компиляции: синтаксическая ошибка» при запуске макроса - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь создать макет для печати в PDF для листа, в котором используется раскрывающийся список.Я хочу, чтобы каждая опция в раскрывающемся списке сохранялась как отдельный PDF.

Это мой код:

Sub Print_To_PDF()
Sheets("MS Wall Summary Daily View").Activate
    Dim vRws As Long, vRng As Range
    Dim d As Range, d8 As Range, Wst As Worksheet
    Dim fPathFile As String

fPathFile = [NewStoreRollout]
Set Wst = Worksheets("MS Wall Summary Daily View")
Set d8 = Wst.Range("D8")

With Wst
    vRws = .Cells(Rows.Count, "A").End(x1Up).Row
    Set vRng = Range(.Cells(2, "A"), .Cells(vRws, "A"))
    .PageSetup.PrintArea = "$C$2:$M$116"

End With
For Each d In vRng.Cells

d8 = d
Wst.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile,
Quality:=xlQualityStandard, _IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Next d
End Sub

enter image description here

Мой раскрывающийся список начинается в A1, хотя я хочу, чтобы PDF-файлы начинались в A2.Ячейка с выпадающим списком: d8

enter image description here

Ячейка с именем "NewStoreRollout" содержит мой путь к файлу, в который я хочу сохранить PDF.

Спасибо

1 Ответ

2 голосов
/ 08 апреля 2019

Исполняемые инструкции в VBA завершаются одним из двух токенов:

  • токен-разделитель инструкций :
  • токен конца строки \r\n (т.е.vbNewLine / Chr(10) + Chr(13))

Это сделало бы эту инструкцию неполной ...

Wst.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile,

... если бы 3-й параметр был необязательным,Поскольку это необязательно, конечная запятая является вполне приемлемой и интерпретируется как передача значения Variant/Empty в качестве 3-го аргумента.

Таким образом, VBA называет это действительным утверждением и переходит к следующему:

Quality:=xlQualityStandard, _IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Э-э-э.Это похоже на список аргументов, но здесь ничего не вызывается, поэтому VBA запутался и не знает, в какую процедуру передать этот список аргументов.

То, что вы хотите, предназначено для двух физическихстроки считаются одной логической строкой .Вы можете сделать это, используя продолжение строки токен _ (пробел, за которым следует подчеркивание).

Wst.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile, _
    Quality:=xlQualityStandard, _IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Таким образом, когда компилятор достигает конца первой строки,он знает, что инструкция продолжается на следующей строке.

Похоже, у вас было продолжение строки после аргумента Quality, затем он удалил разрыв строки, но не подчеркивание - этот аргумент _IncludeDocProperties должен быть IncludeDocProperties.Не стесняйтесь добавлять столько, сколько вам нужно (но не более 20), чтобы сделать код проще для визуальной обработки:

Wst.ExportAsFixedFormat Type:=xlTypePDF, _
                        Filename:=fPathFile, _
                        Quality:=xlQualityStandard, _
                        IncludeDocProperties:=True, _
                        IgnorePrintAreas:=False, _
                        OpenAfterPublish:=False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...