簡體   English   中英

Excel VBA編譯錯誤

[英]Excel VBA Compile Error

我們有一個優秀的電子表格,可用於大多數機器,但在其他機器上卻顯示“隱藏模塊中的編譯錯誤-常規”,但原因似乎是由於缺少參考。

我們檢查是否啟用了宏,但仍然無濟於事。

由於我們使用密碼保護了此excel電子表格,因此我們不想將此密碼提供給我們的用戶檢查參考,並且想知道是否有人知道如何添加VBA代碼以檢查是否需要參考excel電子表格已經存在,如果沒有,則彈出一個消息框來建議用戶。

我們使用的參考如下:

  • Visual Basic應用程序
  • Microsoft Excel 11.0對象庫
  • Microsoft Forms 2.0對象庫
  • Microsoft Windows公共控件5.0(SP2)

或者,如果有人對如何解決此問題有任何其他建議,那將很棒。

您列出的唯一可能會丟失的參考是通用控件。 其余的在每個版本的Excel中都是默認設置。 僅當您有一個用戶窗體或顯式設置它時,窗體一個窗體才是問題所在。 通用控件是您的問題。 它不再隨Office一起提供。 如果您擁有Visual Studio或VB6,則可能擁有它。 或Office的舊版本,例如XP Developer Edition。

無論如何,您可以檢查System文件夾中是否存在OCX文件。 我不認為該文件必須位於該文件夾中,但我從未在其他任何地方看到它。

自從我看到對5.0的引用以來已經有一段時間了,所以我在下面的代碼中包括了如何查找6.0。 檢查以確保您知道所使用的版本。

在標准模塊中:

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Public Function HasCommonControl() As Boolean

    Dim sFolder As String
    Dim lReturn As Long

    Const lSIZE As Long = 255
    Const sDLLNAME As String = "COMCTL32.OCX" 'For windows common control 5.0
    'Const sDLLNAME As String = "MSCOMCTL.OCX" 'For windows common control 6.0

    sFolder = Space(lSIZE)
    lReturn = GetSystemDirectory(sFolder, lSIZE)

    sFolder = Left$(sFolder, lReturn)

    HasCommonControl = Len(Dir(sFolder & Application.PathSeparator & sDLLNAME)) > 0

End Function

說了這么多,為什么要使用通用控件? 如果用於用戶窗體上的樹視圖,則簽出此全vba樹視圖

http://www.jkp-ads.com/articles/treeview.asp

自jkp編寫以來,我就沒有使用過通用控件。 很少有人安裝PC,這很痛苦。

取決於對特定Excel或其他組件版本的引用是一個可能的問題。 只要注意不要使用一個版本而不是另一個版本支持的任何命令/對象/方法/屬性,切換到后期綁定就可以解決該問題。

跟隨RowanC的鏈接(很好的選擇),您可以添加對Excel的引用,例如,編寫代碼,如下所示:

Dim xlWks as Excel.Worksheet
'Dim xlWks as Object

一切調試完畢后,刪除Excel參考並將聲明更改為:

'Dim xlWks as Excel.Worksheet
Dim xlWks as Object

這使您可以在編碼/調試時獲得智能感知的好處,但稍后可以消除對特定版本Excel的依賴。

可能會誤解,但是IIRC Common Controls組件是Visual Basic而不是Office的一部分,因此,除非您分發它並將其與您的應用程序一起注冊,否則它可能在某些系統上不存在。

要嘗試后期綁定,不需要進行引用設置(盡管它可能會影響性能,並且這將意味着自動完成功能在您的代碼中不起作用),而不是通過以下方式調用excel:

Dim oExcel As Excel.Application
  Set oExcel = CreateObject("Excel.Application")

嘗試以這種方式調用它,並刪除對excel對象模型的引用。

 Dim oExcel As Object
   Set oExcel = CreateObject("Excel.Application")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM