2015-03-31 100 views
0

我無法解釋這個簡單代碼有什麼問題。它適用於Excel 2003,但在Excel 2010中顯示如下:在Excel 2010上編譯錯誤,但不在Excel 2003上編譯錯誤

Compile error: Sub of Function not defined.

任何人都可以解釋爲什麼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 
+1

也發佈'IsFileOpen'函數。當您將代碼從2003年轉移到2010年時,應該包含它。 – L42 2015-03-31 07:19:57

+2

此[鏈接](http://www.mrexcel.com/forum/excel-questions/778329-isfileopen.html)可能會爲您澄清。 'IsFileOpen'不是內置的VBA功能。 – rusk 2015-03-31 07:20:25

+0

@rusk它不能解釋爲什麼UDF在xl 2003工作。MJ54,請張貼您的功能。 – brettdj 2015-03-31 07:40:39

回答

1

IsFileOpen函數不存在於您的代碼中,這是唯一可能的解釋。您必須在VBA模塊中的某處聲明它。

這裏有couple of things to check

  • 你拼錯的過程名稱?
  • 嘗試從另一個項目調用一個過程,而不必在「引用」對話框中明確添加對該項目的引用。
  • 指定對調用過程不可見的過程。
  • 聲明不在指定庫或代碼資源中的Windows動態鏈接庫(DLL)例程或Macintosh代碼資源例程。
+0

我已經添加了微軟頁面的功能,因爲Jean-FrançoisCorbett已經擁有了,代碼現在沒有錯誤了。 – MJ54 2015-03-31 10:38:31

+0

所以,我是對的,函數從你的代碼中丟失。 – 2015-03-31 10:44:44

0

IsFileOpen不是VBA內置函數。它可能來自this Microsoft page(正如rusk在評論中指出的那樣),並且代碼只能在新的Excel 2010工作簿中提供,例如粘貼到模塊中。

爲什麼在Excel 2003工作簿中可以使用它,但在2010工作簿中可用?可能是一系列事情中的任何一種。在另一個模塊中,您沒有將其複製到新的工作簿中。它存在於當前安裝的Excel 2010中未提供的加載項中。等等。您沒有提供足夠的信息來正確診斷問題,但無論如何,補救措施都是相同的,如上所述。