Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
关闭Excel文件时发生VBA运行时错误?_Excel_Vba - Fatal编程技术网

关闭Excel文件时发生VBA运行时错误?

关闭Excel文件时发生VBA运行时错误?,excel,vba,Excel,Vba,我做的VBA程序有问题。当我打开工作簿并进行不同的输入时,一切都正常工作,但当我关闭工作簿时,会出现运行时错误“1004”,并显示以下消息: 应用程序定义或对象定义错误 其思想是,列表框中的更改会导致单元格D6和E6中的更改。我有一个宏,需要在每次更改两个单元格时运行,这一点非常完美,但是如果没有运行时错误,我无法关闭工作表 编辑:我通过包含一个errorhandler成功地制定了一个解决方案: Private Sub ListBox1_Change() On Error GoTo Er

我做的VBA程序有问题。当我打开工作簿并进行不同的输入时,一切都正常工作,但当我关闭工作簿时,会出现运行时错误“1004”,并显示以下消息:

应用程序定义或对象定义错误

其思想是,列表框中的更改会导致单元格D6和E6中的更改。我有一个宏,需要在每次更改两个单元格时运行,这一点非常完美,但是如果没有运行时错误,我无法关闭工作表

编辑:我通过包含一个errorhandler成功地制定了一个解决方案:

Private Sub ListBox1_Change()
    On Error GoTo ErrorHandler

    Call Sheet1.Worksheet_Change(Sheet1.Range("D6:E6"))
    
ErrorHandler:
    Err.Clear
    
End Sub

你在做表格还是工作表

ListBox通常是某种用户表单中的UI元素。根据您是否将表单设置为模态,如果您的表单是模态的,并且您关闭父工作表,则可能会遇到问题

编辑: 看起来你没有使用UserForm。然而,可能发生的情况是:

Call ActiveSheet.Worksheet_Change(ActiveSheet.Range("D6:E6"))
调用活动工作表上的函数。如果保存或关闭工作簿,则没有活动工作表。无论出于何种原因,VBA可能在关闭或保存时调用OnChange事件。尝试更改为:

Call sheet1.Worksheet_Change(sheet1.Range("D6:E6"))
您可以在VB编辑器中设置工作表的实际名称。您可以直接使用您选择的名称。例如:MainSheet的地址可以是:MainSheet.Range(…)


HTH

@BigBen当然,谢谢你,我已经编辑了question@ChrisH. 运行时错误发生在我在关闭前保存时和我不保存时。一般来说,我对VBA比较陌生,所以我可能误解了您的问题。但是列表框是一个“ActiveX控件”列表框,放在一个工作表中,有不同的输入/输出单元格和图形。感谢您的帮助,它消除了以前的运行时错误,但现在我得到了一个不同的错误,我编辑了questionOne警告。我应该提到:有不同的方式来处理工作表。可以是:sheets(“sheet1”).Range(…)或sheet1.Range(…)。如果通过按钮上的表视图设置名称,则第一个选项适用。后一个选项在VB编辑器中设置。虽然此错误不是很具体,但原因通常是代码试图访问不存在的内容。