返回列表 上一主題 發帖

[發問] Listbox取資料問題

本帖最後由 GBKEE 於 2016-8-11 06:07 編輯

回復 9# Michelle-W
  1. Private Sub CommandButton1_Click()
  2.     Dim AA(), xi As Integer
  3.     With ListBox1
  4.         For xi = 0 To .ListCount - 1
  5.             '  判斷列表框 (ListBox1) 是否有被點選
  6.             If .Selected(xi) = True Then
  7.                 '  取出該行之數據,存入 AA 陣列中
  8.                 AA = Application.Index(ListBox1.List, xi + 1)
  9.                 Range("A1").Select
  10.                 '*******************
  11.                 Selection.End(xlUp).Select   
  12.                 '***'xlUp 往上 "A1"的 往上 還是在"A1"
  13.                 Sheets("sheet1").Range("a" & ActiveCell.Row + 1) = AA
  14.                 Exit For
  15.             End If
  16.         Next
  17.     End With
  18. End Sub
複製代碼
A欄中資料如何累積的請說明
是這樣嗎?
  1. Option Explicit
  2. Private Sub Ex_CommandButton1_Click()
  3.     Dim AA(), xi As Integer
  4.     With ListBox1
  5.         For xi = 0 To .ListCount - 1
  6.             '  判斷列表框 (ListBox1) 是否有被點選
  7.             If .Selected(xi) = True Then
  8.                 '  取出該行之數據,存入 AA 陣列中
  9.                 AA = Application.Index(ListBox1.List, xi + 1)
  10.                  With Range("A" & xi + 1)
  11.                     '.Cells = AA
  12.                     .Cells = .Cells + AA  '資料是累積的
  13.                ' Exit For       '離開 For 迴圈
  14.                '*******************
  15.                'Listbox1中多個不連續的資料, Exit For 就不執行下一個 .Selected(xi) = True
  16.                '******************************
  17.             End If
  18.         Next
  19.     End With
  20. End Sub
  21. Option Explicit
  22. Private Sub CommandButton1_Click()
  23.     Dim AA(), xi As Integer
  24.     With ListBox1
  25.         For xi = 0 To .ListCount - 1
  26.             '  判斷列表框 (ListBox1) 是否有被點選
  27.             If .Selected(xi) = True Then
  28.                 '  取出該行之數據,存入 AA 陣列中
  29.                 AA = Application.Index(ListBox1.List, xi + 1)
  30.                  With Range("A" & Rows.Count).End(xlUp)  '.Offset(1)  '**還是下一儲存格
  31.                     .Cells = AA
  32.                     '還是 .Cells = .Cells + AA '資料是累積的
  33.                 End With
  34.                     
  35.                     '***Count 屬性 傳回一個 Long (長整數),等於在一個集合物件中的物件數目。
  36.                     'Rows.Count : 工作表的最後一列
  37.                  
  38.                     ' ***Offset 屬性   套用至 Range 物件時用 Offset 屬性。
  39.                     '傳回 Range 物件,用以代表某個指定區域以外的範圍。唯讀。
  40.                     'expression.Offset(RowOffset, ColumnOffset)
  41.                     'Range("A" & Rows.Count).End(xlUp).Offset(1)
  42.                     '工作表A欄底部 , 往上到有資料的儲存格, 的下一儲存格
  43.                 'Exit For
  44.             End If
  45.         Next
  46.     End With
  47. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 10# c_c_lai


我想要將Listbox中所選擇的資料寫入A欄
可能邏輯寫錯了導致您看不懂QQ"

TOP

回復 11# GBKEE

就是點選Listbox中的資料,填入sheet3的A欄
我自己嘗試過即使選擇了三筆,A欄資料也只會出現1筆

想要達到的功能如下圖




另外我也想要在Listbox點選可以刪除的功能
目前的程式碼會一直出現無法辨認的錯誤
不懂錯在哪邊QQ
不曉得可否一起幫我看看
感恩

test.rar (21.75 KB)

TOP

回復 13# Michelle-W
  1. Private Sub 刪除_Click()

  2. '還沒處理完,一直錯誤
  3. Dim i As Integer
  4. For i = home.ListBox1.ListCount - 1 To 0 Step -1 '程式所在位置在 home表單中可以省略 home.
  5. If ListBox1.Selected(i) Then '即然等於True 就不用等於True了
  6. home.ListBox1.RemoveItem (i) 'ListBox1的 list所指定的是清單來源,也就是說清單來源有改變ListBox1的清單才會改變
  7. '所以這裡用RemoveItem是錯誤的,正確方式,應該刪除 Sheet2的資料,這裡先不幫你修正
  8. End If
  9. Next

  10. End Sub
複製代碼
  1. Private Sub 匯入_Click()
  2.     Dim AA(), xi As Integer
  3.     With ListBox1
  4.         For xi = 0 To .ListCount - 1
  5.             '  判斷列表框 (ListBox1) 是否有被點選
  6.             If .Selected(xi) Then '即然等於True 就不用等於True了
  7.                 '  取出該行之數據,存入 AA 陣列中
  8.                 AA = Application.Index(ListBox1.List, xi + 1)
  9.                 ''下列語句必須加入.End(xlUp),這裡已幫你修正
  10.                 With Sheets("sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1)  '.Offset(1)  '**還是下一儲存格
  11.                     '''''''''''''''''''''
  12.                     '下面2個語法依你的需求擇一
  13.                     .Cells = AA '單一儲存格使用
  14.                     .Resize(, UBound(AA)) = AA '若使用多欄多列必須指定有多少的儲存格給它
  15.                     '''''''''''
  16.                     '還是 .Cells = .Cells + AA '資料是累積的
  17.                 End With
  18.                     
  19.                     '***Count 屬性 傳回一個 Long (長整數),等於在一個集合物件中的物件數目。
  20.                     'Rows.Count : 工作表的最後一列
  21.                  
  22.                     ' ***Offset 屬性   套用至 Range 物件時用 Offset 屬性。
  23.                     '傳回 Range 物件,用以代表某個指定區域以外的範圍。唯讀。
  24.                     'expression.Offset(RowOffset, ColumnOffset)
  25.                     'Range("A" & Rows.Count).End(xlUp).Offset(1)
  26.                     '工作表A欄底部 , 往上到有資料的儲存格, 的下一儲存格
  27.                 'Exit For
  28.             End If
  29.         Next
  30.     End With
  31.     ListB1 '匯入後重新設定ListBox1
  32. End Sub
複製代碼

TOP

  1. Private Sub 刪除_Click()
  2. Dim arr() '設定一個空白陣列
  3. Dim i As Integer
  4. n = 0
  5. For i = ListBox1.ListCount - 1 To 0 Step -1
  6.     If ListBox1.Selected(i) Then
  7.         n = n + 1
  8.         ReDim Preserve arr(1 To n) '重設陣列數目,增加陣列數目,
  9.         arr(n) = i + 2 '將欲刪除的列號記錄在陣列中,+2是從 (RowSource = "Sheet2!A2:A" & ro) 的A2計算列號
  10.     End If
  11. Next
  12. For Each ar In arr
  13.     Sheet2.Rows(ar).Delete '將記錄在陣列的列號一一刪除
  14. Next
  15. ListB1 '刪除後重設ListBox1
  16. '這裡會分2個迴圈刪除是因為,當刪除Sheet2中記錄時會使得其他ListBox1.Selected為False
  17. '(也就是說所有已選取的資料會變成無選取狀態)以致於只能刪除一列,
  18. '故只有先記錄欲刪除的列號,再刪除其資料
  19. End Sub
複製代碼
回復 13# Michelle-W

TOP

回復 15# lpk187
回復 11# GBKEE
回復 10# c_c_lai

謝謝你還幫我解釋刪除的程式碼錯誤,我剛有自己研究了一下怎麼刪除儲存格
不過還是您比較快~哈哈


非常謝謝各位前輩們提供的程式碼
最重要的是都還有附上講解,讓小妹我能更快進入狀況
覺得很溫暖^^
非常感謝!!!

TOP

回復 16# Michelle-W
整理一下你的程式碼
可了解看看
  1. Option Explicit
  2. Dim Rng As Range, Msg As Boolean
  3. Private Sub UserForm_Initialize()
  4.     Msg = MsgBox("ListBox 清單的來源。" & vbLf & "Yes=使用RowSource" & vbLf & "No= 使用List(陣列)", vbYesNo) = vbYes
  5.     ListB1
  6. End Sub
  7. Public Sub ListB1()
  8.     Dim RO As Integer
  9.     With Sheet2
  10.         RO = IIf(.Cells(Rows.Count, 1).End(xlUp).Row > 2, .Cells(Rows.Count, 1).End(xlUp).Row, 2)
  11.         Set Rng = .Range("A2:A" & RO)
  12.     End With
  13.     With ListBox1
  14.         .MultiSelect = fmMultiSelectMulti
  15.         If Msg Then
  16.             .RowSource = Rng.Address(, , , 1, 1)
  17.         Else
  18.             .List = Rng.Value
  19.         End If
  20.         .ColumnCount = Rng.Columns.Count
  21.     End With
  22. End Sub
  23. Private Sub 新增_Click()
  24. '輸入的資料回傳至儲存格記錄
  25. Dim RO As Integer
  26. With Sheet2
  27.     RO = .[A65536].End(xlUp).Row + 1
  28.     .Cells(RO, 1) = TextBox1.Value
  29.     TextBox1.Value = ""
  30.     ListB1 '重設 ListBox1
  31. End With
  32. End Sub
  33. Private Sub 刪除_Click()
  34.     Dim i As Integer, r As String, E As Variant
  35.     For i = home.ListBox1.ListCount - 1 To 0 Step -1
  36.         If home.ListBox1.Selected(i) = True Then
  37.            If Msg = False Then         '**ListBox 清單的來源。No= 使用List(陣列)
  38.                 home.ListBox1.RemoveItem (i)
  39.             ElseIf Msg = True Then   '**ListBox 清單的來源。Yes=使用RowSource
  40.                 r = IIf(r <> "", r & "," & i + 1, i + 1)
  41.             End If
  42.         End If
  43.     Next
  44.     If Msg = True Then
  45.         For Each E In Split(r, ",")
  46.             Rng.Rows(E).Delete            '**刪除範圍中的資料 Yes=使用RowSource
  47.         Next
  48.         ListB1
  49.     End If
  50. End Sub
  51. Private Sub 匯入_Click()
  52.     Dim AA, xi As Integer
  53.     With ListBox1
  54.         For xi = 0 To .ListCount - 1
  55.             '  判斷列表框 (ListBox1) 是否有被點選
  56.             If .Selected(xi) = True Then
  57.                 '  取出該行之數據,存入 AA 陣列中
  58.                 AA = Application.Index(ListBox1.List, xi + 1)
  59.                  'With Sheets("sheet3").Range("A" & Rows.Count).Offset(1)  '.Offset(1)  '**還是下一儲存格
  60.                  With Sheets("sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1)  '.Offset(1)  '**還是下一儲存格
  61.                     .Cells = .Cells + AA
  62.                     '還是 .Cells = .Cells + AA '資料是累積的
  63.                 End With
  64.             End If
  65.         Next
  66.     End With
  67. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 15# lpk187


   

大大
   想請教一下如果Listbox資料欄位比較多 要如何匯入儲存格,依照您給的code要如何修改呢~~求解惑
yvonne

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題