VBA Error: Expected End Sub. Outlook Combing Public Sub and Sub
VBA Error: Expected End Sub. Outlook Combing Public Sub and Sub
在下面的 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
我认为你只需要调用 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
您不能组合任何 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 中已贬值并且不是必需的,我在这里使用它是为了说明目的。
在下面的 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
我认为你只需要调用 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
您不能组合任何 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 中已贬值并且不是必需的,我在这里使用它是为了说明目的。