0

我用两个按钮创建了一个非常简单的模态表单:一个只是关闭表单,另一个调用Application.RTD.RefreshData. 在 Excel 2003 中,这一切正常,但在 Excel 2010 中,Application.RTD.RefreshData崩溃

运行时错误“1004”:应用程序定义的或对象定义的错误

如果我将表单创建为无模式,则在 Excel 2003 和 Excel 2010 中一切正常。

对于它的价值,这是表单背后的所有代码:

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

我已经在 Google 和 SO 上搜索了有关这方面的任何信息,但无济于事。这是 Excel 2010 的一个已知问题,还是我真的不允许Application.RTD.RefreshData从模式表单中调用?

编辑:据我所知,我应该补充一点,我的 Excel 会话中没有RTD 服务器。

EDIT2:进一步调查:Excel 2003 或 2007 中不会出现错误;它确实发生在 2010 年和 2013 年。

4

1 回答 1

1

在普通的 RTD 服务器中,您使用 excel 回调调用 UpdateNotify(),然后 Excel 将根据油门设置和当前的“忙碌”程度来决定何时调用 RefreshData()。“忙碌”的定义通常包括公式重新计算、保存工作表和打开模式对话框等内容。

当 Excel 认为自己很忙时,它会通过抛出异常来保护自己免受外部组件的影响。这是有道理的,因为他们不希望他们的应用程序因为贪婪的插件或宏而变得不稳定或锁定。本质上,如果 Excel 确定它“忙”,则您在代码中访问 Excel 对象模型的任何部分(包括您对 RefreshData() 的调用)的所有调用都可能引发异常。我怀疑在更高版本的 Excel 中,他们已经收紧了对“忙碌”的定义,这就是为什么您会看到与模式对话框存在这种差异的原因。

于 2014-03-05T11:14:14.843 回答