返回列表 上一主題 發帖

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

回復 28# chaoyiho
  1.     '  2016/04/26  增加與 "EXCEL表單處理介面.ListBox" 的連結。
  2.     Dim cts As Integer
  3.    
  4.     With ActiveSheet.PivotTables("樞紐分析表1").PivotFields(" VSL")
  5.         For cts = 0 To EXCEL表單處理介面.ListBox1.ListCount - 1
  6.             '  .PivotItems(EXCEL表單處理介面.ListBox1.List(cts)).Visible = IIf(EXCEL表單處理介面.ListBox1.Selected(cts), True, False)
  7.             '  更簡潔、扼要直接的 Assignment 的表示式。
  8.             .PivotItems(EXCEL表單處理介面.ListBox1.List(cts)).Visible = EXCEL表單處理介面.ListBox1.Selected(cts)
  9.         Next cts
  10.     End With
複製代碼
接下看你自己如何去變化它了。

TOP



TOP

回復 36# chaoyiho
請先看懂 #32 的詳盡圖解說明,
從你程式的畫面與內容水準,
是應該會理解的。
你竟然是全吃下來?

TOP

本帖最後由 c_c_lai 於 2016-4-27 13:17 編輯

回復 36# chaoyiho

這和我當初引導你的方式有所出入。
請回溯到 #12 的處裡。
即便你未加入 #34 的程式碼,
這個錯誤訊息業已存在。

TOP

回復 39# chaoyiho
很單純地,從頭到尾你只需修改:
一、

二、

三、

四、

就全部更新了。如照這樣修正仍還有錯誤
將它上傳我會來檢查。

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

本帖最後由 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

回復 52# chaoyiho
這是你並無任何選項,接著直接點選 "執行分析" 所產生的,
是麼?

TOP

回復 52# chaoyiho
這是你並無任何選項,接著直接點選 "執行分析" 所產生的,
是麼?
我已 E-Mail 傳 表單處理系統3.2等待修改.xlsm, 以及原先的
檔案.rar 了,你執行看看。

TOP

        靜思自在 : 甘願做、歡喜受。
返回列表 上一主題