返回列表 上一主題 發帖

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

回復 52# chaoyiho
表單處理系統3.2等待修改.rar (633.3 KB)
這隻是你應用 luhpro 大大的處理模式:
檔案.rar (305.26 KB)

TOP

回復  c_c_lai

前輩您的檔案我已經測試過了 的確可以用!
經過我一行一行的比對語法後
我發現我的錯字 ...
chaoyiho 發表於 2016-4-28 11:19

其實這非你之問題,ActiveWorkbook.PivotCaches 在做過一次之後,
似乎無法再次處理,就算是把所有工作表單刪除只剩下 "FORM_REPORT"
一樣會出現

執行階段錯誤 '5'
程序呼叫或引數不正確

說真格的,我並不孰悉 Excel 的 PivotTable 處哩,你可能要請教
版上的各位大大了。

TOP

本帖最後由 c_c_lai 於 2016-4-29 17:14 編輯

回復 58# chaoyiho
針對 #58
不知道有沒有可以重複動作的方式呢?
因為這樣子的方式似乎是一次性的
分析過後就無法再做篩選 必須要重新再一次才有辦法處理了(?)
------------------------------------------------------------------------
為解決僅能執行一次的困擾問題,修正成能夠重複「可多次執行」,即
『執行分析』之「樞紐分析表」,修改內容如下 (僅列示出修改部分):
一、
  1. Private Sub CommandButton3_Click()
  2.     If TestBookOpen("FORM_REPORT.xlsx") = "" Then MsgBox "檔案未開啟": Exit Sub '跳出程序

  3.     刪除分析結果表                '  增加刪除分析工作表單,以便再次『執行分析』

  4.     Range("A1:M50192").Select
  5.     Range("A2").Activate
  6.     Sheets.Add
  7.     '  ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
  8.         "FORM_REPORT!R2C1:R50192C13", Version:=xlPivotTableVersion14). _
  9.         CreatePivotTable TableDestination:="工作表1!R3C1", TableName:="樞紐分析表1", _
  10.         DefaultVersion:=xlPivotTableVersion14
  11.     '  2016/04/29  修正僅能執行一次的困擾問題
  12.     '  原本『執行分析』之「樞紐分析表」僅能執行一次,為解決此一困擾問題,故將 TableDestination
  13.     '  傳入值 "工作表1!R3C1" 予以修正為 ActiveSheet.Name & "!R3C1",如此便可多次執行了。
  14.     ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
  15.         "FORM_REPORT!R2C1:R50192C13", Version:=xlPivotTableVersion14). _
  16.         CreatePivotTable TableDestination:=ActiveSheet.Name & "!R3C1", TableName:="樞紐分析表1", _
  17.         DefaultVersion:=xlPivotTableVersion14
  18.     '  Sheets("工作表1").Select          '  原為「工作表1」,但執行第二次時為「工作表10」, 則會產生錯誤訊息
  19.     Sheets(ActiveSheet.Name).Select      '  為配合「可多次執行」,將表單名稱改以動態隨機處理 (2016/04/29)
  20.     Cells(3, 1).Select
複製代碼
二、
  1.     '  2016/04/26  增加與 "EXCEL表單處理介面.ListBox" 的連結。
  2.     '  所有增列之 Sav、J.C.W、P.C.O、Pmax、Stuffing Box、F.O.、
  3.     '  Exh、Exh 工作表單 VSL 均與 「總表」對應之 VSL 同步;
  4.     '  則將 "以下 With ~ End With" 新增的「程式碼」內容移至此處。
  5.     Dim cts As Integer
  6.    
  7.     With ActiveSheet.PivotTables("樞紐分析表1").PivotFields(" VSL")
  8.         For cts = 0 To EXCEL表單處理介面.ListBox1.ListCount - 1
  9.             '  .PivotItems(EXCEL表單處理介面.ListBox1.List(cts)).Visible = IIf(EXCEL表單處理介面.ListBox1.Selected(cts), True, False)
  10.             '  更簡潔、扼要的 Assignment 的表示式。
  11.             .PivotItems(EXCEL表單處理介面.ListBox1.List(cts)).Visible = EXCEL表單處理介面.ListBox1.Selected(cts)
  12.         Next cts
  13.     End With

  14.     '  為配合「可多次執行」,予以修正改以動態對應新產生表單名稱,以免產生錯誤  (2016/04/29)
  15.     '  Sheets("工作表1").Select
  16.     Sheets(ActiveSheet.Name).Select
  17.     '  Sheets("工作表1").Name = "Liner"
  18.     Sheets(ActiveSheet.Name).Name = "Liner"
  19.     '  Sheets("工作表1").Copy Before:=Sheets(1)
  20.     Sheets(ActiveSheet.Name).Copy Before:=Sheets(1)
  21.     '  Sheets("工作表1 (2)").Select
  22.     Sheets(ActiveSheet.Name).Select
  23.     '  Sheets("工作表1 (2)").Name = "Exh"
  24.     Sheets(ActiveSheet.Name).Name = "Exh"
  25.     '  Sheets("工作表1 (2)").Copy Before:=Sheets(1)
  26.     Sheets(ActiveSheet.Name).Copy Before:=Sheets(1)
  27.     '  Sheets("工作表1 (3)").Select
  28.     Sheets(ActiveSheet.Name).Select
  29.     '  Sheets("工作表1 (3)").Name = "F.O Inlet"
  30.     Sheets(ActiveSheet.Name).Name = "F.O Inlet"
  31.     '  Sheets("工作表1 (3)").Copy Before:=Sheets(1)
  32.     Sheets(ActiveSheet.Name).Copy Before:=Sheets(1)
  33.     '  Sheets("工作表1 (4)").Select
  34.     Sheets(ActiveSheet.Name).Select
  35.     '  Sheets("工作表1 (4)").Name = "Stuffing Box"
  36.     Sheets(ActiveSheet.Name).Name = "Stuffing Box"
  37.     '  Sheets("工作表1 (4)").Copy Before:=Sheets(1)
  38.     Sheets(ActiveSheet.Name).Copy Before:=Sheets(1)
  39.     '  Sheets("工作表1 (5)").Select
  40.     Sheets(ActiveSheet.Name).Select
  41.     '  Sheets("工作表1 (5)").Name = "Pmax"
  42.     Sheets(ActiveSheet.Name).Name = "Pmax"
複製代碼

TOP

本帖最後由 c_c_lai 於 2016-4-29 17:21 編輯

回復 58# chaoyiho
三、 原本是在結束前處裡「總表」對應表單處理介面.ListBox 的選項清單。
        修改為增列之 Sav、J.C.W、與 「總表」 同步對應 VSL,如 ( 二、說明);
        故以下更改為 "備註"。
  1.     '  2016/04/26  增加與 "EXCEL表單處理介面.ListBox" 的連結。
  2.     '  所有增列之 Sav、J.C.W、P.C.O、Pmax、Stuffing Box、F.O.、
  3.     '  Exh、Exh 工作表單 VSL 不需與 「總表」對應之 VSL 同步;
  4.     '  亦即僅僅「總表」對應表單處理介面.ListBox 的選項清單。
  5.     '  則將 "以下 With ~ End With" 新增的「程式碼」內容移至此處。
  6.     '  Dim cts As Integer
  7.    
  8.     '  With ActiveSheet.PivotTables("樞紐分析表1").PivotFields(" VSL")
  9.     '      For cts = 0 To EXCEL表單處理介面.ListBox1.ListCount - 1
  10.             '  .PivotItems(EXCEL表單處理介面.ListBox1.List(cts)).Visible = IIf(EXCEL表單處理介面.ListBox1.Selected(cts), True, False)
  11.             '  更簡潔、扼要的 Assignment 的表示式。
  12.     '          .PivotItems(EXCEL表單處理介面.ListBox1.List(cts)).Visible = EXCEL表單處理介面.ListBox1.Selected(cts)
  13.     '      Next cts
  14.     '  End With
  15.     '  -------------------------------------------------------------------------
  16. End Sub
複製代碼
為考慮閱覽者的了解前因後果,以明瞭前後修改原因及內容,特將修正前事項特別
予以備註方式保留,以便與修正後內容作比對,提醒並增進 "修業功力"。

TOP

在 UserForm 內宣告 "公用字典" 物件模式:
表單處理系統3.2 Ex2.rar (25.09 KB)
第二支是 luhpro 大大指導的案例;
在 Module1 宣告 "公用字典" 物件模式:
表單處理系統3.2 luhpro.rar (188.77 KB)
提供同功能異處理的兩個Excel檔案,
供作學習參考。

TOP

        靜思自在 : 人生不一定球球是好球,但是有歷練的強打者,隨時都可以揮棒。
返回列表 上一主題