在Excel 2010上编译错误,但不在Excel 2003上编译

我无法解释这个简单的代码有什么问题。 它在Excel 2003中完美工作,但在Excel 2010中显示:

编译错误:未定义函数的子集。

任何人都可以解释为什么Excel 2010中有一个错误?

Sub Test_File_Opened() If IsFileOpen("D:\Test.xls") Then MsgBox "File is open!" Else MsgBox "File is closed!" End If End Sub 

IsFileOpen函数不存在于您的代码中,这是唯一可能的解释。 您必须在VBA模块中的某处声明它。

这里有几件事要检查 :

  • 你拼错程序的名字?
  • 尝试从另一个项目中调用一个过程,而不必在“引用”对话框中明确添加对该项目的引用。
  • 指定对调用过程不可见的过程。
  • 声明不在指定的库或代码资源中的Windowsdynamic链接库(DLL)例程或Macintosh代码资源例程。

IsFileOpen不是VBA内置函数。 它可能来自这个微软页面 (正如评论中的rusk所指出的那样),并且代码只能在新的Excel 2010工作簿中提供,例如粘贴到模块中。

为什么在Excel 2003工作簿中可用,但在2010年工作簿中可用? 可能是一系列的事情。 在另一个模块中,您没有将其复制到新的工作簿中。 它是在您目前安装的Excel 2010中没有提供的加载项中。等等。您没有提供足够的信息来正确诊断问题,但补救措施是相同的,无论如何,如上所述。