Workbook_Open()方法导致崩溃

我有一个VBA的工作簿分布在几个模块,类模块和用户表单模块。 工作簿保存为启用macros的Excel工作簿(* .xlsm),并且在从Alt + F8macros对话框窗口启动Main方法时,工作簿运行良好。 当在“Alt + F11开发人员”窗口中“跨越”代码时,代码也可以正常运行 – 但是,这种方法需要长时间,因为总代码长达数千行,并且有很多循环。

当我将下面的代码添加到ThisWorkbook模块时出现问题。 当我插入此代码时,Excel打开后立即崩溃。

 Private Sub Workbook_Open() Main End Sub 

这里所说的Main方法是指模块MainModule中的一个MainModule 。 它没有参数,必需或可选,并且所有必要的variables都在MainModule模块的Option Explicit语句下正确声明。

我需要macros来加载运行,因为我打算设置一个计划的Windows任务,通过VBS文件定期运行它。 这是怎么回事? 为什么从Workbook_Open()方法调用Main()方法会导致Excel崩溃,而手动运行Main()方法的工作正常?

编辑: Main()方法的代码。

 Public Sub Main() Dim allTickets As Collection Dim grpTickets As Collection Dim sa() As String Dim strConfig() As String Dim rptFp As String Dim i As Integer SetDefaults If DEV_ENABLED Then Application.WindowState = xlNormal If MsgBox( _ Prompt:="Run reporting script?", _ Buttons:=vbYesNo _ ) = vbNo Then Terminate Application.WindowState = xlMinimized End If MainForm.Show vbModeless EnsureCfgPath LoadConfig ' Check for valid config in memory. On Error Resume Next If Len(config(0)) = 0 Then MsgBox "Could not validate or create config file. Please contact support for assistance." Terminate ElseIf Err.Number <> 0 Then On Error GoTo 0 MsgBox "Could not validate or create config file. Please contact support for assistance." Terminate End If On Error GoTo 0 ' Import tickets from BA files. Set allTickets = ImportBAData(config(1)) ' Create report(s) identified by config file. ReDim strConfig(7) For i = 0 To Ubound(config) Step 8 On Error Resume Next strConfig(0) = config(i) strConfig(1) = config(i + 1) strConfig(2) = config(i + 2) strConfig(3) = config(i + 3) strConfig(4) = config(i + 4) strConfig(5) = config(i + 5) strConfig(6) = config(i + 6) strConfig(7) = config(i + 7) If Err.Number <> 0 Then Logger "[MainModule:Main] Config file contains too few options. Adopting ""END"" command option." strConfig(7) = "!~END//~!" End If On Error GoTo 0 sa = Split(strConfig(5), ",") Set grpTickets = FilterTickets(allTickets, strConfig(4), sa) ' Create report. rptFp = CreateReport(configs:=strConfig, Tickets:=grpTickets) ' Send report. If Not rptFp = ".xlsx" Then SendReport FilePath:=rptFp, Recipients:=strConfig(6) If strConfig(7) = "!~END//~!" Then Exit For ElseIf Not strConfig(7) = "!~FOLLOW//~!" Then Logger "[MainModule:Main] Illegal config option """ & strConfig(7) & """ passed. Terminating process." Exit For End If Next i MainForm.SetStatus("Cleaning up...") Terminate End Sub 

编辑2:非常非常奇怪的分辨率。

不pipe我在Main放置了一个Exit Sub语句,Excel仍然立即崩溃。 所以,我注释掉了Main所有内容,除了Exit Sub语句,然后保存并closures。 接下来,我打开工作簿,并没有崩溃 – 它执行Exit Sub语句就好了。 所以,我删除了Exit Sub语句,并取消了Main的代码注释,现在它可以工作。

我将这个问题归结为微软方面的质量保证问题。

当我设置下面的代码来testing时,我没有任何错误。

在module1中:

 Option Explicit Public Function Main() MsgBox "Hello World" End Function 

在Workbooks_Open中:

 Private Sub Workbook_Open() Main End Sub 

testing这个,如果它不工作在一个保存的XLSM文件,那么问题可能是如何configurationExcel。 (例如,检查可信的设置,允许VBA …)