我创建了一个非常简单的模式表单,它有两个按钮:一个是关闭表单,另一个是调用Application.RTD.RefreshData。在Excel2003中,这一切都工作得很好,但是在Excel2010中,Application.RTD.RefreshData崩溃了
运行时错误“1004”:应用程序定义的或对象定义的错误
如果我将表单创建为无模式,那么在Excel2003和Excel2010中,一切都可以正常工作。
值得注意的是,这是表单背后的所有代码:
Private Sub RefreshDataButton_Click()
Application.RTD.RefreshData
End Sub
Private Sub CloseButton_Click()
Call Unload(Me)
End Sub我使用我的工作表中的代码调用表单:
Private Sub CommandButton1_Click()
Dim form As UserForm1
Set form = New UserForm1
form.Show vbModal
End Sub我已经搜索过谷歌,所以任何有关这方面的信息都没有用。这是Excel2010的一个已知问题,还是真的不允许我从模式表单中调用Application.RTD.RefreshData?
编辑:据我所知,在我的会话中没有 RTD服务器。
EDIT2:进一步调查:此错误不在Excel2003或2007中发生,而是发生在2010年和2013年。
发布于 2014-03-05 11:14:14
在普通的RTD服务器中,您可以使用excel回调来调用UpdateNotify(),然后Excel将根据节流设置和它当前的“忙”程度来决定何时调用RefreshData()。“忙碌”的定义通常包括公式重新计算、保存工作表和打开一个模态对话框等。
Excel通过抛出异常来保护自己不受外部组件的影响。这是有意义的,因为他们不希望他们的应用程序因为贪婪的加载项或宏而变得不稳定或被锁定。本质上,您在代码中输入的所有访问Excel对象模型的任何部分的调用(包括对RefreshData()的调用)都可以抛出异常,如果Excel决定“繁忙”的话。我怀疑在Excel的后期版本中,他们已经收紧了对“忙碌”的定义,这就是为什么您看到了模态对话框的这种差异。
https://stackoverflow.com/questions/21705593
复制相似问题