【问题标题】:VBA Error: Expected End Sub. Outlook Combing Public Sub and SubVBA 错误:预期结束子。 Outlook 结合公共子和子
【发布时间】:2015-02-27 16:47:18
【问题描述】:

在下面的 VBA(宏)中,我尝试合并两个宏。当代码运行时(通过接收电子邮件触发),我在第 9 行收到预期的 End Sub 错误。

第一个宏 (saveAttachtoAccess) 保存附加到电子邮件并由 Outlook 中的规则触发的文件。第二个宏 (run_Excel_Macro) 将打开一个 Excel 文件,刷新两张工作表,保存,然后退出。

如第 9 行(Exit Sub)所述,我收到编译错误:Expected End Sub。我的问题是当 End Sub 在第 9 行时,它只运行 saveAttachtoAccess。

Public Sub saveAttachtoAccess(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
saveFolder = "C:\Users\Josh\Documents\Source_Files"
     For Each objAtt In itm.Attachments
     objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName
     Set objAtt = Nothing
     Next
     Exit Sub
Sub run_Excel_Macro()
    Dim App As Excel.Application
    Dim wkbk As Excel.Workbook

    Set App = New Excel.Application
    App.Visible = True
    Set wkbk = App.Workbooks.Open("C:\Users\Documents\C:\Users\Josh\Documents\Source_Files"JoshExcel.xlsm")
    App.OnTime DateAdd("s", 5, Now()), wkbk.Name &"!RefreshCombineSaveExit"

    Set App = Nothing
    Set wkbk = Nothing
End Sub

【问题讨论】:

    标签: vba excel outlook


    【解决方案1】:

    我认为您只需要调用 run_Excel_macro 然后结束您的 Public Sub 而不是退出。

    Public Sub saveAttachtoAccess(itm As Outlook.MailItem)
    
    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    
    saveFolder = "C:\Users\Josh\Documents\Source_Files"
       For Each objAtt In itm.Attachments
         objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName
         Set objAtt = Nothing
       Next
    
       Call run_Excel_Macro 
    
    End Sub
    
    Sub run_Excel_Macro()
    Dim App As Excel.Application
    Dim wkbk As Excel.Workbook
    
    Set App = New Excel.Application
    App.Visible = True
    Set wkbk = App.Workbooks.Open("C:\Users\Documents\C:\Users\Josh\Documents\Source_Files"JoshExcel.xlsm")
    App.OnTime DateAdd("s", 5, Now()), wkbk.Name & "!RefreshCombineSaveExit"
    
    Set App = Nothing
    Set wkbk = Nothing
    End Sub
    

    【讨论】:

    • Kyle,我现在在第 20 行收到“类型不匹配”。我尝试单击工具> 参考以进行连接,但它是灰色的。有什么想法吗?
    • 它与 Run_Excel_Macro 子有关。我敢打赌,这是您打开该工作簿的方式。设置 wkbk = Workbooks.Open("C:\Users\Josh\Documents\Source_Files\JoshExcel.xlsm")
    【解决方案2】:

    您不能在任何 OOP 语言中组合过程 - 它们不是这样工作的。

    你可以像这样Call另一个子从一个子:

    Public Sub saveAttachtoAccess(itm As Outlook.MailItem)
    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    saveFolder = "C:\Users\Josh\Documents\Source_Files"
         For Each objAtt In itm.Attachments
         objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName
         Set objAtt = Nothing
         Next
    Call run_Excel_Macro '// <-- Call other sub before ending this one.
    End Sub
    
    Sub run_Excel_Macro()
        Dim App As Excel.Application
        Dim wkbk As Excel.Workbook
    
        Set App = New Excel.Application
        App.Visible = True
        Set wkbk = App.Workbooks.Open("C:\Users\Documents\C:\Users\Josh\Documents\Source_Files"JoshExcel.xlsm")
        App.OnTime DateAdd("s", 5, Now()), wkbk.Name &"!RefreshCombineSaveExit"
    
        Set App = Nothing
        Set wkbk = Nothing
    End Sub
    

    请注意,Call 关键字实际上在 VBA 中已被贬值并且不是必需的,我在这里使用它是为了说明目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多