簡體   English   中英

Excel VBA宏編譯錯誤:預期結束子

[英]Excel VBA Macro Compile error: Expected End Sub

嘗試將我的代碼分配給在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對我來說是新手,所以任何幫助將不勝感激。 謝謝。

您要兩次聲明一個過程: Sub Button1_Click()Sub filename_cellvalue()

您應該刪除一個。 如果要將代碼放入按鈕事件中,請刪除Sub filename_cellvalue()

 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 ,並將該過程命名為任何不同的方法都會中斷該對象與事件處理程序之間的鏈接:該過程永遠不會運行以響應Button1Click 當您進入涉及接口和多態性的更高級的,面向對象的編程概念時,在非處理程序過程中使用下划線(尤其是在公共場合) 引起問題(閱讀:更多編譯錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM