返回列表 上一主題 發帖

[發問] 引用其他控制項的問題

[發問] 引用其他控制項的問題

請問 , 因為我設計好的表單有用到listview控制項 ,
該控制項屬Microsoft ListView Control  (COMCTL32.OCX)
但可能到了另外一台電腦 , 就沒有該OCX 或存放位置變了 ,
導致出現錯誤  "物件程式庫不合法 , 或其中所引用的物件定義已經不存在"
要怎樣才能解決這類的問題?
或者有辦法在workbook打開時用code去設定引用的控制項路徑嗎?

回復 1# stillfish00


    可將路徑  另設一元件 加以控制
並於 開啟時 跳出元件 藉此控制

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復  stillfish00


    可將路徑  另設一元件 加以控制
並於 開啟時 跳出元件 藉此控制
mark15jill 發表於 2012-12-26 11:29


不好意思 , 我不懂 "開啟時 跳出元件 藉此控制" 的意思是 ?

我目前找到的語法 , 比較接近我想要的是用像
ThisWorkbook.VBProject.References.AddFromFile
去改變引用路徑 , 不過暫時還沒空去實際試試看是不是OK ...

TOP

回復 3# stillfish00


    這麼說好了

1.你設計好的表單 是涵蓋在Excel VBA 內,還是另外包裝成執行檔?
2.所謂設定一開檔案就執行的意思
Private Sub Workbook_Open()
'userform1.show
'applocation XXXX
End Sub

這是當檔案開啟就執行XXXX副程式 或 表單呼叫

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 4# mark15jill
是Excel VBA的表單 , 但表單上的控制項是用新增控制項去勾選的
如圖勾選的Microsoft ListView Control  , 其位置在C:\Windows\System32\COMCTL32.OCX

但若別人在C:\Windows\System32\沒有該OCX , 或系統路徑不一樣
則在執行底下時 , 就會出錯
Private Sub Workbook_Open()
    Load userform1
    userform1.show
End Sub

TOP

本帖最後由 mark15jill 於 2013-1-2 09:31 編輯

回復 5# stillfish00

會錯誤是正常的..
因為指向錯誤 或 無指向之項目
程式當然判讀不出來

建議
可再開啟程式前先判讀該檔案是否存在於判讀目錄底下

Private Sub Workbook_Open()
if dir("C:\Windows\System32\COMCTL32.OCX") <>"" then
      Load userform1
     userform1.show
endif
end sub

或者
判讀無此檔案 或 不再預設目錄底下的話
搜尋預設目錄且將檔案複製到該目錄(這有點類似木馬的寫法)

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

回復 1# stillfish00
要解決該電腦中無此控制項或位置錯誤的問題
無疑的就是要在OFFICE預設資料夾內置入該控制項的DLL
解決方法當然就是將你電腦中該DLL檔案複製到欲使用此檔案的電腦C:\Windows\system32\
的目錄下
學海無涯_不恥下問

TOP

回復 6# mark15jill
回復 7# Hsieh

謝謝兩位回應 ,
原本是想說若同時附上ocx/dll給別人時 , 有沒有其它指定引用路徑方法可以迴避這錯誤
程式中直接複製過去我也覺得不太好...
看起來似乎只能提示使用者後 , 讓他自己手動複製會好一點?

TOP

回復 8# stillfish00

綜合以上討論
就是必須複製此OCX或是DLL檔案然後判斷該電腦是否已有此檔案
類似附件
Excel add dll.zip (307.49 KB)
學海無涯_不恥下問

TOP

回復 8# stillfish00

可以新增一個提示訊號(如 MSGBOX)
此訊號在判斷預設目錄無檔案下根據結果進行是否複製的選項

  多做多想多學習,少看少錯少迷途

  多做=多多練習,多多編寫。
  多想=想想為什麼人家程式要那樣寫,如果換成自己,又會怎寫。
  多學習=學習人家的發問並解答,學習人家的寫法

  少看=只看不做也枉然

TOP

        靜思自在 : 話多不如話少,話少不如話好。
返回列表 上一主題