当我运行宏时,为什么Excel会给出“编译错误:语法错误”

时间:2019-04-08 19:46:51

标签: vba

我正在尝试为使用下拉列表的工作表创建到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 个答案:

答案 0 :(得分:2)

VBA中的可执行指令以两个令牌之一终止:

  • 指令分隔符:
  • 行尾令牌\r\n(即vbNewLine / Chr(10) + Chr(13)

这将使该指令不完整...

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

...如果第三个参数不是可选的。由于末尾的逗号是可选的,因此完全可以接受,并且解释为将Variant/Empty值作为第三个参数传递。

因此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