Excel VBA宏编译错误:预期结束子

时间:2018-09-28 11:08:48

标签: excel vba excel-vba

尝试将我的代码分配给在VBA中独立工作的按钮,但是将其添加到按钮时出现以下错误;

  

编译错误:预期的最终目标

我的代码如下;

Sub Button1_Click()

Private Sub filename_cellvalue()
    Dim Path As String
    Dim filename As String
    Path = Environ("userprofile") & "\Desktop\Invoices\"
    filename = Range("K13")
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=Path & filename & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub

VBA对我来说是新手,所以将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:4)

您要两次声明一个过程:Sub Button1_Click()Sub filename_cellvalue()

您应该删除一个。如果要将代码放入按钮事件中,请删除Sub filename_cellvalue()

答案 1 :(得分:0)

Sub Button1_Click()

Private Sub filename_cellvalue()

Sub语句声明过程范围。语法为:

{accessibility} Sub {name} ({args})
    {statements}
End Sub

正文中的{accessibility}修饰符,{args}参数列表和{statements}是可选的(请注意,如果没有访问修饰符,则过程将隐式Public-而在许多其他语言中(包括VB.NET),隐式默认值为Private;最好在此处明确显示。)

这种语法使嵌套 Sub语句非法:

Sub DoSomething()
    Sub Illegal()
    End Sub
End Sub

因此,当编译器遇到Sub语句时,其后的所有内容都将被视为过程主体的一部分,直到下一个End Sub令牌为止。

如果Button1_Click处理程序是合法的,则需要在 Sub filename_cellvalue开始之前将其正确终止:

Sub Button1_Click()
End Sub

Private Sub filename_cellvalue()
    '...
End Sub

否则,需要删除Sub Button1_Click()不完整的语句。

也就是说,filename_cellvalue是过程的错误标识符:Sub过程做某事,其名称应以动词开头。例如,ExportAsPDF更合适。请注意PascalCase的名称,而不是lower_snake_case:下划线字符在VBA中具有特殊含义,如Button1_Click所示。

下划线将接口/事件源与接口成员/事件名称分开:当Button1_Click对象引发其Button1事件时调用Click,并对该过程进行任何其他命名断开对象与事件处理程序之间的链接:该过程将永远不会响应Click上的Button1而运行。当您进入涉及接口和多态性的更高级的,面向对象的编程概念时,在非处理程序过程中使用下划线,尤其是在公共场合,会引起问题(阅读:更多编译错误)。