在子例程中,我想打开一个工作簿,从中读取一些工作簿并关闭它 .
出于某种原因,我收到一个错误:
Run-time error '1004':
Method 'Close' of object _Workbook failed
我已经确定了一个最小的代码片段来重现问题 .
创建一个新的Excel文件 . 在其中,创建一个Userform . 在此,使用以下Click事件代码创建一个命令按钮:
Private Sub CommandButton1_Click()
Dim filename As String
Dim opened_workbook As Workbook
filename = Application.GetOpenFilename() ' User selects valid Excel file
Set opened_workbook = Application.Workbooks.Open(filename)
' File operations would occur here
opened_workbook.Close ' Exception thrown here
MsgBox "If you got here, it worked!"
Unload Me
End Sub
令我感到困惑的是,当Command按钮不在用户窗体上时(在工作表上的普通按钮上),相同的代码不会发生此错误 .
我甚至不知道还有什么要报告或在哪里解释这种行为(除了StackOverflow!) . 我正在使用Excel for Mac 2011编写VBA,如果它有所作为,可以转移到Windows Excel 2010 .
2 回答
是的,在Excel 2011中,它是一个错误(未记录 - 我还没有找到它的文档) . 您必须稍微修改代码 . 试试这个
我在Mac上的Excel 11上遇到了这个确切的问题(在Windows上运行了精细的Excel 2013),只有在从UserForm调用的模块子中发生了错误 . 如果某人(像我一样)试图使用不在UserForm本身内的模块(或其他位置)中的子/函数的workbook.close方法,则不能使用“Me” . '我'只能在UserForm代码本身中使用 .
而不是'卸载我'使用卸载功能和用户窗体的名称 .