Board logo

標題: [發問] 選擇ListBox內資料如何放到其他UserForm的TextBox [打印本頁]

作者: kkooo15    時間: 2019-7-27 12:23     標題: 選擇ListBox內資料如何放到其他UserForm的TextBox

[attach]31084[/attach]
問題一
請問要如何可以點選ListBox的其中的資料後
按確定可以將點選的"編號"放到UserForm2的TextBox1

問題二
如果我有二個UserForm
我選UserForm2使用查詢時,"編號"就會存在UserForm2的TextBox1
我選UserForm3使用查詢時,"編號"就會存在UserForm3的TextBox1
  1. Option Explicit
  2. Dim xSh As Worksheet, xRng(1 To 3) As Range, Msg單號 As Boolean, d As Object, d2 As Object, d3 As Object
  3. Private Sub CommandButton6_Click()
  4.     If TextBox1.Text <> "" Then
  5.     '將 UserForm2查出來的編號 資料放入 UserForm1的TextBox1
  6.     UserForm1.TextBox1.Text = UserForm2.TextBox1.Text
  7.     '將 TextBox1 資料放入 TBox1
  8.     Unload UserForm2
  9.     '關閉表單
  10.     Else
  11.     End If
  12. End Sub

  13. Private Sub UserForm_Initialize()
  14.     Set xSh = Sheets("清單")
  15.     '宣告 xSH = Sheets("清單")

  16.     MultiPage1.Value = 0
  17.     Show_List
  18.     Dim i As Single, Rng As Range
  19.     Set d = CreateObject("scripting.dictionary")
  20.     '宣告 d = 建立並傳回 ActiveX 物件 建立一個 Dictionary物件
  21.     Set Rng = xSh.Cells(5, "D")
  22.     'xSH = Sheets("基本資料") Rng =儲存格 Cells(第5欄,C列)
  23.     Do While Rng <> ""
  24.     'Rng = 儲存格 Cells(第5欄,C列) 不等於  空白
  25.         If d.exists(Rng.Value) = False Then
  26.             '
  27.             Set d(Rng.Value) = Rng
  28.         Else
  29.             Set d(Rng.Value) = Union(Rng, d(Rng.Value))
  30.         End If
  31.         Set Rng = Rng.Offset(1)
  32.     Loop
  33.     ComboBox1.List = d.KEYS
  34.     'ComboBox1 等於 d KEYS
  35. End Sub

  36. Private Sub SpinButton1_Change()
  37.     單號.Caption = SpinButton1
  38.     Msg單號 = True
  39.     Show_List
  40.     Msg單號 = False
  41. End Sub

  42. Private Sub Show_List()
  43.     Dim i As Integer, E As Variant
  44.     Set xRng(1) = xSh.Range("c4").CurrentRegion
  45.     With xSh
  46.         i = .Columns.Count
  47.         Set xRng(1) = .Range("c4").CurrentRegion
  48.         Set xRng(2) = .Cells(1, i).CurrentRegion
  49.         xRng(2).Clear
  50.         If Msg單號 Then
  51.             .Cells(1, i) = "單號"
  52.             .Cells(2, i) = SpinButton1
  53.         Else
  54.         End If
  55.         Set xRng(2) = .Cells(1, i).CurrentRegion
  56.     End With
  57.     Set xRng(3) = xRng(2).Cells(1).Offset(, -20).Resize(, xRng(1).Columns.Count)
  58.     xRng(3).CurrentRegion.Clear
  59.     xRng(1).AdvancedFilter xlFilterCopy, xRng(2), xRng(3)
  60.     Set xRng(3) = xRng(3).CurrentRegion
  61.     If xRng(3).Rows.Count > 2 Then
  62.         Set xRng(3) = xRng(3).Rows("2:" & xRng(3).Rows.Count)
  63.     Else
  64.         Set xRng(3) = xRng(3).Rows(2)
  65.     End If
  66.     With ListBox1
  67.         .ColumnHeads = True
  68.         .ColumnCount = -1
  69.         .RowSource = xRng(3).Address(, , , 1, 1)
  70.     End With
  71.     xRng(2).Clear
  72. End Sub
複製代碼
[attach]31087[/attach]
作者: kkooo15    時間: 2019-7-29 23:22

本帖最後由 kkooo15 於 2019-7-29 23:25 編輯

回復 1# kkooo15

問題二
如果我有二個UserForm
我選UserForm2使用查詢時,"編號"就會存在UserForm2的TextBox1
我選UserForm3使用查詢時,"編號"就會存在UserForm3的TextBox1

我想到辦法解決了。

就是在開表單的時候把資料清空。
  1. Sub show1()
  2.     UserForm1.show
  3. End Sub
  4. Sub show2()
  5.     '開啟表單時清空TEXTBOX1內的資料
  6.     UserForm2.TextBox1.Text = ""
  7.     UserForm2.show
  8. End Sub
  9. Sub show3()
  10.     '開啟表單時清空TEXTBOX1內的資料
  11.     UserForm3.TextBox1.Text = ""
  12.     UserForm3.show
  13. End Sub
複製代碼
然後得到資料後按確定時
UserForm2跟UserForm3都放資料
  1. Private Sub CommandButton6_Click()
  2.     If TextBox1.Text <> "" Then
  3.     '將 UserForm2查出來的編號 資料放入 UserForm1的TextBox1
  4.     UserForm2.TextBox1.Text = UserForm1.TextBox1.Text
  5.     UserForm3.TextBox1.Text = UserForm1.TextBox1.Text
  6.     '將 TextBox1 資料放入 TBox1
  7.     Unload Me
  8.     '關閉表單
  9.     Else
  10.     End If
  11. End Sub
複製代碼
現在差..我要怎麼進去點ListBox內資料後,會放到上個的TextBox

[attach]31095[/attach]
作者: ciboybj    時間: 2019-8-3 10:40

回復 1# kkooo15
我有一個類似的程式片段
使用者雙擊ListBox1中的資料後 (當然你也可以選擇用單擊)
用for迴圈查出哪一筆資料被點擊 然後ListBox1.List(i) 應該就可以拿到資料
  1. Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  2.     For i = 0 To ListBox1.ListCount - 1
  3.         If ListBox1.Selected(i) = True Then
  4.             TextBox1.Text = ListBox1.List(i)
  5.             ListBox1.Visible = False
  6.         End If
  7.     Next i
  8. End Sub
複製代碼

作者: kkooo15    時間: 2019-8-5 13:51

回復 3# ciboybj

太感謝了
我又可以在往前一步了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)