Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Excel 2016在工作簿_Open()事件处理程序中使用Debug.Print Tab()时崩溃_Vba_Excel_Events_Crash_Excel 2016 - Fatal编程技术网

Vba Excel 2016在工作簿_Open()事件处理程序中使用Debug.Print Tab()时崩溃

Vba Excel 2016在工作簿_Open()事件处理程序中使用Debug.Print Tab()时崩溃,vba,excel,events,crash,excel-2016,Vba,Excel,Events,Crash,Excel 2016,我注意到了一些奇怪的事情,在两台配置类似的计算机上进行了测试(Windows 10 64位最新版本,Excel 2016 32位),其中一台是干净的安装: 只需创建一个新的.xlsm工作簿,并将以下内容放置在ThisWorkbook.cls类模块中: Private Sub Workbook_Open() Debug.Print Tab(10); "Hello!" End Sub 保存。接近。打开(如果在受保护视图模式下打开,请启用编辑、关闭和重新打开)。Excel

我注意到了一些奇怪的事情,在两台配置类似的计算机上进行了测试(Windows 10 64位最新版本,Excel 2016 32位),其中一台是干净的安装:

只需创建一个新的.xlsm工作簿,并将以下内容放置在ThisWorkbook.cls类模块中:

Private Sub Workbook_Open()
    Debug.Print Tab(10); "Hello!"
End Sub
保存。接近。打开(如果在受保护视图模式下打开,请启用编辑、关闭和重新打开)。Excel崩溃

最小、完整、可验证的示例

现在最大的问题是:为什么

我试图延迟出现问题的
Debug.Print选项卡(10);“您好!”
将其放置在Sub中,在使用
Application.OnTime Now()+(1/3600/24)*5打开事件几秒钟后,我调用该Sub,SubName“
,仍然会崩溃。我手动调用它,它工作得很好

MSDN对此只字不提:

编辑:2021年4月19日

首先,我不得不说我有点震惊:我在2018年4月19日7:42(2018-04-19 07:42:36Z)问了这个问题。在这个时候没有,现在仍然没有,任何关于堆栈溢出的错误的引用。从那以后我就没有遇到过这个错误。今天,整整三年后,我又一次偶然发现了它。命运是很神奇的

无论如何,只要尝试在VBE立即窗口中使用
Debug.Print
和方法在未加载VBE窗口的情况下打印单个
选项卡
字符,就会出现此错误(意味着在当前Excel实例中不会打开一次)。这就是为什么在工作簿打开事件中更容易遇到它的原因。。。但是,如果将以下子项放置在工作簿中,关闭它,然后在不打开VBE的情况下从“开发”选项卡>“宏”按钮运行它,Excel也会崩溃:

Private Sub test_MRE()
    Debug.Print Tab
End Sub
因此,必须非常小心,不要将空变量发送到控制台(或者您可能会在发现发生了什么之前寻找数小时,故意说话……),因为这也会导致Excel崩溃(
选项卡,并且在它前面发送注释):

我在我的项目中设法在Excel崩溃出现之前犯下了我们可以听到的错误,如果这有助于人们更好地了解实际发生的情况,那么这是一个自动化错误:


在Win7/Office 2010上工作,但在Win10/Office 2016上崩溃。然而,如果我把一个空的
Debug.Print
作为第一条语句,它就会工作。事实上,不会再崩溃了!你有个好主意:)在Windows10/Office2007上也会崩溃
Private Sub test_MRE()
    Dim Var1 'Variant/Empty
    Debug.Print Var1, "hello"
End Sub