尝试将我的代码分配给在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对我来说是新手,所以将不胜感激。谢谢。
答案 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
而运行。当您进入涉及接口和多态性的更高级的,面向对象的编程概念时,在非处理程序过程中使用下划线,尤其是在公共场合,会会引起问题(阅读:更多编译错误)。