返回列表 上一主題 發帖

[發問] 怎麼在USERFORM中加入可篩選複選之樹狀圖

回復 39# chaoyiho


    那個訊息代表2意義
(1) 物件不存在註冊表中
(2) 你可能打錯名
答案=(2)
Set a = CreateObject("scripting.dictionary")

TOP

回復 39# chaoyiho
#40 是我比較常用的處理方式 (從早期傳統系統到目前),
因為 ListBox 是在 "EXCEL表單處理介面"  裡執行處理,
習慣上我會將字典的作業直接放置在 UserForm 裡宣告
與處裡,而並不將它置於 UserForm 外宣告,除非它在
UserForm 區塊外亦被其它程式模組使用、運用到除外。

如果你覺得如何宣告均無妨,只要系統能動便 OK 的話
(我是不贊成你以此種方式來學習編撰程式);那我就以
你傳來的 "錯誤訊息" 來做解答吧 (檔案.rar)!

亦即在你目前之 Module1 上頭加上:
  1. Private Sub Auto_Open()
  2.     Set vD = CreateObject("Scripting.Dictionary")      '  建立物件。
  3. End Sub
複製代碼

TOP

本帖最後由 c_c_lai 於 2016-4-27 19:50 編輯

回復 39# chaoyiho
對應 EXCEL表單處理介面.ListBox 的部分,
與 #40 是一致的。

擇一選擇加入 (請看備註說明),
AB 不能全部通吃 (這便是你看到的
重複 Integer 的錯誤訊息)。

接下來全交給了。

TOP

回復 43# c_c_lai

前輩早,抱歉現在才回文
因為昨天有點事情耽擱了...
您上面的回文我現在馬上來處理看看~~!!

但是關於回文前的那個步驟 我的確是照著做了
卻是會出現 ActiveX 無法建立物件的錯誤
如附檔
表單處理系統3.2等待修改.rar (650.65 KB)

真的不知道到底怎麼了 Q_Q

如果您看見了 再麻煩您幫我檢查一下!!
謝謝您

痾...對了  我沒有權限 所以無法在這裡抓東西
希望前輩再麻煩一下給我個下載點或網址或直接寄送至我的信箱ch.yiho0105@gmail.com
我會馬上回復
再次感謝

TOP

回復 41# jackyq

前輩您好
您的意思是 activex的錯誤是因為這一句語法錯誤嗎?
但是我檢查完之後
應該沒有錯啊(?)
可以請您說明詳細一點嗎?

TOP

本帖最後由 jackyq 於 2016-4-28 09:12 編輯

回復 44# chaoyiho


Set vD = CreateObject("scripting.dictionary")

你少了一個   i


另外 LongPtr  
用 long 就可以了

TOP

回復 46# jackyq

真的少了一個 i !!!

但是就算加上去 我還是持續出現activex錯誤....

TOP

本帖最後由 jackyq 於 2016-4-28 09:30 編輯

EXCEL表單處理介面 裡面的

Private Sub UserForm_Initialize()

Dim hWndForm As LongPtr
Dim IStyle As LongPtr

Set vD = CreateObject("scripting.dictonary")

改成如下

Private Sub UserForm_Initialize()

Dim hWndForm As Long
Dim IStyle As Long

Set vD = CreateObject("scripting.dictionary")


存檔後 , 關閉再重開啟

改完後 我這邊執行就ok 了啊

TOP

另外
把 EXCEL表單處理介面 裡面的第一行   Option Explicit  暫時先拿掉

TOP

本帖最後由 c_c_lai 於 2016-4-28 09:48 編輯

回復 44# chaoyiho
第一個問題: 變數宣告前後不一
  1. Private Sub CommandButton1_Click()
  2.     If Application.FindFile = False Then
  3.         MsgBox "您沒有開啟母檔"
  4.     End If
  5.     Dim lRow&        '  Dim lRrow&  (錯誤的變數宣告)
  6.     lRow = 3         '  lRrow = 3   (錯誤的變數宣告)
  7.    
  8.     EXCEL表單處理介面.ListBox1.Clear    '  避免重複貼製,造成與 "手動篩選" 項目不符
  9.    
  10.     vD.RemoveAll
  11.     While Cells(lRow, 5) <> ""
  12.       If Not vD.Exists(CStr(Cells(lRow, 5))) Then
  13.         EXCEL表單處理介面.ListBox1.AddItem CStr(Cells(lRow, 5))
  14.         vD(CStr(Cells(lRow, 5))) = lRow
  15.       End If
  16.       lRow = lRow + 1
  17.     Wend             '  上有 While 而無結束處裡 (Wend)
  18. End Sub
複製代碼
第一個問題: 產生 ActiveX 的原因
  1. Private Sub UserForm_Initialize()
  2.     Dim hWndForm As Long        '  LongPtr 是 64 位元的長整數指標宣告
  3.     Dim IStyle As Long
  4.    
  5.     '  Set vD = CreateObject("scripting.dictonary")    '  少一個 i
  6.     Set vD = CreateObject("Scripting.Dictionary")
  7.    
  8.     hWndForm = FindWindow("ThunderDFrame", Me.Caption)
  9.     IStyle = GetWindowLong(hWndForm, GWL_STYLE)
  10.     IStyle = IStyle Or WS_THICKFRAME '(還原)
  11.     IStyle = IStyle Or WS_MINIMIZEBOX '(最小化)
  12.     IStyle = IStyle Or WS_MAXIMIZEBOX '(最大化)
  13.     SetWindowLong hWndForm, GWL_STYLE, IStyle
  14. End Sub
複製代碼
jackyq 大大指證出你  ActiveX 的錯誤點了,原因是你輸錯字了
Set vD = CreateObject("scripting.dictonary") ,少一個 i  ,
與大小寫無關,年紀大了畢竟視力退很多了,不仔細還真沒看到呢!
謝謝 jackyq 大大。

TOP

        靜思自在 : 一個人的快樂.不是因為他擁有得多,而是因為他計較得少。
返回列表 上一主題