返回列表 上一主題 發帖

[發問] ListBox與排序加總問題

回復 28# starbox520
  1. Private Sub CommandButton1_Click()
  2.     Dim AA(), xi As Integer
  3.     ' With frmSelector 這是表單物件不是ListBox   **會有錯誤的
  4.     'With frmSelector.lstSelector  也可用這表單物的子物件(ListBox)
  5.     With lstSelector   '物件(ListBox)
  6.         If .ListIndex > 0 Then         'ListBox清單中選取列的索引值 ,   -1 表沒有選取
  7.         '**  0 為表頭 如要選取 可改為 If .ListIndex > -1 Then
  8.             
  9.             '  取出該行之數據,存入 AA 陣列中
  10.             AA = Application.Index(.List, .ListIndex + 1)
  11.             With Sheets("sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1)  '.Offset(1)  '**還是下一儲存格
  12.                         .Cells.Resize(, 9) = AA
  13.                     '還是 .Cells = .Cells + AA '資料是累積的
  14.                     '***AA為陣列不可用此語法**
  15.                 End With
  16.             End If
  17.     End With
  18. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-10-24 05:41 編輯

回復 31# starbox520

自動對應到選擇的機台編號右手邊的第一排資料
所說: 是對應到如圖嗎




你期望得到"工作表1"左上圖示 以對應字串顯示出的排序

如圖工作表2與工作表1 的欄位不盡相同.
     問題是工作表2沒有欄位的資料,如何在工作表1秀出來,
   工作表1上的5筆資料,看不出如何在工作表2取出 .
   工作表1  Customergroup  的5筆資料,
    AVAGO  SYNAPTICS  MAXIM  MELLANOX  PMC-SIERRA
    關聯性看不出來

   
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 36# starbox520

看到最後這圖片,才明瞭你在說什麼.

試試看 按我的程式碼
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range
  4.     Set Rng = Sheets("TR排機&產出").Range("E4")
  5.     Application.ScreenUpdating = False
  6.     Do While Rng <> ""
  7.         Ex_AutoFilter Rng              '呼叫 程式
  8.         Set Rng = Rng.Offset(5)
  9.     Loop
  10.     Application.ScreenUpdating = True
  11. End Sub
  12. Sub Ex_AutoFilter(Rng As Range)
  13.     Dim xRng(1 To 2) As Range
  14.     With Sheets("工作表2")
  15.         Set xRng(1) = .Range("a1").CurrentRegion
  16.         xRng(1).AutoFilter
  17.         Set xRng(2) = Cells(1, Columns.Count - xRng(1).Columns.Count)
  18.     End With
  19.      With xRng(1)
  20.         '**'自動篩選  **
  21.         .AutoFilter Field:=1, Criteria1:=Rng             '第一個欄位 , 篩選準則=Rng
  22.         .AutoFilter Field:=2, Criteria1:=Rng(1, 2)    '第二個欄位 , 篩選準則=Rng(1, 2)
  23.         '**'自動篩選  **
  24.         .Copy xRng(2)
  25.        End With
  26.        Rng(2).Resize(4, 4) = xRng(2).CurrentRegion.Range("A2:D5").Value
  27. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-10-25 10:28 編輯

回復 38# starbox520
不用很多個按鈕也不要用按鈕
TR排機&產出上,滑鼠移到E欄上的所指定的Customer,秀出表單

TR排機&產出模組的程式碼
  1. Public Sh_Rng As Range, Sh_Ar
  2. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  3.     If IsError(Target(1)) Then Unload frmSelector:         Exit Sub
  4.     If (Target(1).Row + 1) Mod 5 = 0 And Target(1) <> "" And Target(1).Column = 5 Then
  5.         Set Sh_Rng = Cells(Target(1).Row, "E")
  6.         Ex_Customer_Package
  7.         If IsEmpty(Sh_Ar) Then MsgBox Sh_Rng & "-" & Sh_Rng(1, 2) & vbLf & "找不到": Exit Sub
  8.         Unload frmSelector
  9.         frmSelector.Show False
  10.     Else
  11.         Unload frmSelector
  12.     End If
  13. End Sub
  14. Private Sub Ex_Customer_Package()
  15.     Dim  i As Integer, ii As Integer, Ar
  16.     Sh_Ar = Ar:    i = 2
  17.     With Sheets("工作表2")
  18.         Do While .Cells(i, 1) <> ""
  19.             If .Cells(i, 1) = Sh_Rng And .Cells(i, 2) = Sh_Rng(1, 2) Then
  20.             If IsEmpty(Ar) Then ReDim Ar(1 To 8, 1 To 1) Else ReDim Preserve Ar(1 To 8, 1 To UBound(Ar, 2) + 1)
  21.                 For ii = 1 To 8
  22.                 Ar(ii, UBound(Ar, 2)) = .Cells(i, ii).Text
  23.                 Next
  24.             End If
  25.             i = i + 1
  26.         Loop
  27.     End With
  28.     If IsEmpty(Ar) Then Exit Sub
  29.     Sh_Ar = Application.Transpose(Ar)
  30. End Sub
複製代碼
frmSelector表單模阻的程式碼
  1. Option Explicit
  2. Private Sub UserForm_Initialize()
  3.     StartupPosition = 0
  4.     Top = 0
  5.     Left = Windows(1).Width - Width
  6.     lstSelector_設定
  7. End Sub
  8. Private Sub lstSelector_設定()
  9.     With lstSelector
  10.         .ColumnCount = 8
  11.         .MultiSelect = 1            ' MultiSelect 屬性  指定物件是否接受多重選取。
  12.        If Not IsEmpty(Sheets("TR排機&產出").Sh_Ar) Then .List = Sheets("TR排機&產出").Sh_Ar
  13.     End With
  14. End Sub
  15. Private Sub CommandButton1_Click()
  16.     Dim AA, i As Integer, ii As Integer
  17.     With lstSelector
  18.         For i = 0 To .ListCount - 1
  19.             If .Selected(i) Then
  20.                 If IsEmpty(AA) Then ReDim AA(1 To 4, 1 To 1) Else ReDim Preserve AA(1 To 4, 1 To UBound(AA, 2) + 1)
  21.                 For ii = 1 To 4
  22.                     AA(ii, UBound(AA, 2)) = .List(i, ii - 1)
  23.                 Next
  24.             End If
  25.         Next
  26.     End With
  27.     If IsEmpty(AA) Then
  28.         MsgBox "你沒有選取資料"
  29.     ElseIf UBound(AA, 2) > 4 Then
  30.         MsgBox "你選取 超過 4 筆 資料"
  31.     Else
  32.         If MsgBox("共 選取 " & UBound(AA, 2) & " 筆資料" & vbLf & "確定輸入", vbYesNo) = vbYes Then
  33.             With Sheets("TR排機&產出").Sh_Rng.Offset(1)
  34.                 .Resize(4, 4) = ""
  35.                 .Resize(UBound(AA, 2), UBound(AA)) = Application.Transpose(AA)
  36.             End With
  37.         End If
  38.     End If
  39. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 40# starbox520
TR排機&產出模組的程式碼



   
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 42# starbox520
你的說明沒有很瞭解.
frmSelector模組,修改一下試試看
  1. Option Explicit
  2. Private Sub UserForm_Initialize()
  3.     StartupPosition = 0
  4.     Top = 0
  5.     Left = Windows(1).Width - Width
  6.     lstSelector_設定
  7. End Sub
  8. Private Sub lstSelector_設定()
  9.     With lstSelector
  10.         '**反百的部分可以只能反白一筆 ,不要這麼多筆嗎
  11.       ' **取消     .MultiSelect = 1            *** MultiSelect 屬性  指定物件是否接受多重選取。
  12.        If Not IsEmpty(Sheets("TR排機&產出").Sh_Ar) Then .List = Sheets("TR排機&產出").Sh_Ar
  13.     End With
  14.     With ListBox1  '**frmSelector中的第二個ListBox 控制項
  15.         .ColumnCount = 9
  16.         .ColumnWidths = "60,35,75,40,30,60,30,70,30"
  17.     End With
  18. End Sub
  19. Private Sub lstSelector_Change()
  20.     If lstSelector.ListIndex > -1 Then Ex_WIP
  21. End Sub
  22. Private Sub Ex_WIP()
  23.     Dim i As Integer, Ar, A(1 To 4), Ab(), ii As Integer
  24.        With Me.lstSelector
  25.             For i = 0 To 3
  26.                 A(i + 1) = .List(.ListIndex, i)
  27.             Next
  28.        End With
  29.        i = 2
  30.     With Sheets("WIP")
  31.         Do While .Cells(i, 1) <> ""
  32.             If .Cells(i, "A") = A(1) And .Cells(i, "E") = A(2) And .Cells(i, "G") = A(3) And .Cells(i, "F") = A(4) Then
  33.                 If IsEmpty(Ar) Then ReDim Ar(1 To 1) Else ReDim Preserve Ar(1 To UBound(Ar) + 1)
  34.                 ReDim Ab(1 To 1, 1 To 9)
  35.                 For ii = 1 To 8
  36.                    Ab(1, ii) = .Cells(i, ii + 1) ' 8欄資料: B欄- I欄
  37.                Next
  38.                Ab(1, 9) = .Cells(i, "K") 'K欄
  39.                Ar(UBound(Ar)) = Ab
  40.                  '** Listbox 最多顯示 9列
  41.             End If
  42.             i = i + 1
  43.         Loop
  44.     End With
  45.     '***********************************
  46.     '**frmSelector中的第二個ListBox 控制項
  47.     With ListBox1
  48.         .Clear
  49.         If UBound(Ar) > 1 Then
  50.              .List = Application.Transpose(Application.Transpose(Ar))
  51.         ElseIf UBound(Ar) = 1 Then
  52.             .List = Ar(1)
  53.         End If
  54.     End With
  55.     '***********************************
  56. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 44# starbox520
2003版 沒有錯誤

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-10-27 05:17 編輯

回復 46# starbox520
  1.   c_c_lai 提供 高於2003版
  2.             '  Sheets("WIP").Cells(i, "F").Value : 950 : Variant/Double : A(4) : "950" : Variant/String
  3.             ' If .Cells(i, "A") = A(1) And .Cells(i, "E") = A(2) And .Cells(i, "G") = A(3) And .Cells(i, "F") = A(4) Then
  4.             If .Cells(i, "A") = A(1) And .Cells(i, "E") = A(2) And .Cells(i, "G") = A(3) And CStr(.Cells(i, "F")) = A(4) Then
複製代碼
如再不行請附檔

第一個ListBox應該是列出相近的後,剩餘的資料再以工作表2"數量"大小顯示
顯示在哪裡!

不了解的是 附圖的表一或表二 邏輯如何定的

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-10-27 13:53 編輯

回復 48# c_c_lai
2003版沒這問題



   


PS:TR排機&產出模組
修正
  1. Private Sub Ex_Customer_Package()
  2.     Dim i As Integer, ii As Integer, Ar
  3.     Sh_Ar = Ar:    i = 2
  4.     With Sheets("工作表2")
  5.         Do While .Cells(i, 1) <> ""
  6.             If .Cells(i, 1) = Sh_Rng And .Cells(i, 2) = Sh_Rng(1, 2) Then
  7.             If IsEmpty(Ar) Then ReDim Ar(1 To 1) Else ReDim Preserve Ar(1 To UBound(Ar) + 1)
  8.             Ar(UBound(Ar)) = .Cells(i, 1).Resize(, 4)
  9.             End If
  10.             i = i + 1
  11.         Loop
  12.     End With
  13.     If IsEmpty(Ar) Then Exit Sub
  14.     If UBound(Ar) = 1 Then
  15.         Sh_Ar = Ar(1)
  16.         Else
  17.     Sh_Ar = Application.Transpose(Application.Transpose(Ar))
  18.     End If
  19. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 51# starbox520

EX:上面的前五項資料 就是符合 "TR排機&產出" 第一行的資訊所篩選出來的,  請用圖示標出哪一行
會有這10攔的內容:2003版ListBox只能顯示9欄
  1.   
  2. '44# 所說出現偵錯錯誤...
  3. ' If .Cells(i, "A") = A(1) And .Cells(i, "E") = A(2) And .Cells(i, "G") = A(3) And .Cells(i, "F") = A(4) Then
  4.             If .Cells(i, "A") = A(1) And .Cells(i, "E") = A(2) And .Cells(i, "G") = A(3) And CStr(.Cells(i, "F")) = A(4) Then
複製代碼


第一個ListBox的這兩筆資訊可以對調位置嗎,貼上去的部分也剛好顛倒了
看圖示 是哪裡調位置
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題