返回列表 上一主題 發帖

[發問] Listbox取資料問題

  1. Private Sub CommandButton1_Click()
  2. '輸入的資料回傳至儲存格記錄
  3. With Sheet2
  4. 'Set a = .[A65536].End(xlUp).Offset(1, 0)
  5. 'a.Resize(, 1) = Array(TextBox1)
  6.     ro = .[A65536].End(xlUp).Row + 1
  7.     .Cells(ro, 1) = TextBox1.Value
  8.     TextBox1.Value = ""
  9.     ListB1 '重設 ListBox1
  10. End With
  11. End Sub

  12. Private Sub UserForm_Initialize()
  13. ListB1
  14. End Sub

  15. Public Sub ListB1()
  16.     ro = Sheet2.[A65536].End(xlUp).Row
  17.     With ListBox1
  18.         .MultiSelect = fmMultiSelectMulti
  19.         .RowSource = "Sheet2!A2:A" & ro '如何使其資料顯示sheet2-A欄有資料的部分??
  20.         .ColumnCount = 2
  21.     End With
  22. End Sub
複製代碼
回復 1# Michelle-W

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

        靜思自在 : 真正的愛心,是照顧好自己的這顆心。
返回列表 上一主題