Nên dùng đối tượng nào để lấy thông tin từ sheet lên Form? (3 người xem)

  • Thread starter Thread starter bebeen
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

bebeen

Thành viên thường trực
Tham gia
13/2/12
Bài viết
213
Được thích
24
Em muốn đưa nội dung ở ô excel lên form. Câu hỏi cụ thể ở file đính kèm!
 

File đính kèm

Và nhân tiện nói đến vấn đề này, em làm sao nó không lấy thông tin được nhỉ!?
Mã:
Option Explicit


Private Sub ComboBox1_Change()
    With Main
        .Label1 = .ComboBox1.Column(1)
        .ListBox1 = .ComboBox1.Column(2)
    End With
End Sub


Private Sub CommandButton1_Click()
    Unload Main
End Sub


Private Sub UserForm_Initialize()
  With Main.ComboBox1
    .RowSource = "MyRang"
    .ColumnCount = 2
    .ColumnWidths = "50;100"
    .ListWidth = 150
  End With
End Sub
Nhờ A/C xem dùm thêm cho em ạ!
 

File đính kèm

Upvote 0
Và nhân tiện nói đến vấn đề này, em làm sao nó không lấy thông tin được nhỉ!?
Mã:
Option Explicit


Private Sub ComboBox1_Change()
    With Main
        .Label1 = .ComboBox1.Column(1)
        .ListBox1 = .ComboBox1.Column(2)
    End With
End Sub


Private Sub CommandButton1_Click()
    Unload Main
End Sub


Private Sub UserForm_Initialize()
  With Main.ComboBox1
    .RowSource = "[B][COLOR=#ff0000]MyRang[/COLOR][/B]"
    .ColumnCount = 2
    .ColumnWidths = "50;100"
    .ListWidth = 150
  End With
End Sub
Nhờ A/C xem dùm thêm cho em ạ!

MyRang là cái gì vậy bạn? Nếu là name thì trong file bạn gửi lên đâu có name đó ở đâu đâu mà nó hiện lên?
 
Upvote 0
MyRang là name ạ. Anh xem file đính kèm nhé!

Không cần "nem chả" gì cả! Trong UserForm của bạn, code thế này:

Mã:
Option Explicit
Private PriArray


Private Sub ComboBox1_Change()
    With ComboBox1
        If .MatchFound Then
            Dim r As Long
            Dim FindArray(1 To 1, 1 To 2)
            For r = 1 To .ListCount
                If PriArray(r, 1) = .Text Then
                    FindArray(1, 1) = PriArray(r, 2)
                    FindArray(1, 2) = PriArray(r, 3)
                    Exit For
                End If
            Next
            ListBox1.List = FindArray
        End If
    End With
End Sub


Private Sub UserForm_Initialize()
    Dim LastRow As Long
    Dim MyRange As Range
    LastRow = Sheets("dl").Range("A65536").End(xlUp).Row
    Set MyRange = Sheets("dl").Range("A2:A" & LastRow)
    ComboBox1.List = MyRange.Value
    PriArray = MyRange.Resize(, 3).Value
End Sub
 

File đính kèm

Upvote 0
Không cần "nem chả" gì cả! Trong UserForm của bạn, code thế này:

Mã:
Option Explicit
Private PriArray


Private Sub ComboBox1_Change()
    With ComboBox1
        If .MatchFound Then
            Dim r As Long
            Dim FindArray(1 To 1, 1 To 2)
            For r = 1 To .ListCount
                If PriArray(r, 1) = .Text Then
                    FindArray(1, 1) = PriArray(r, 2)
                    FindArray(1, 2) = PriArray(r, 3)
                    Exit For
                End If
            Next
            ListBox1.List = FindArray
        End If
    End With
End Sub


Private Sub UserForm_Initialize()
    Dim LastRow As Long
    Dim MyRange As Range
    LastRow = Sheets("dl").Range("A65536").End(xlUp).Row
    Set MyRange = Sheets("dl").Range("A2:A" & LastRow)
    ComboBox1.List = MyRange.Value
    PriArray = MyRange.Resize(, 3).Value
End Sub
Trong bài này thì nó chỉ hiện được một dòng thui. Nếu ô excel có hàng nghì từ thì sao? Em muốn nó hiển thị đầy trong Listbox cơ? Hoặc có thể dụng công cụ nào khác để nó hiển thị được không?
 
Upvote 0
Trong bài này thì nó chỉ hiện được một dòng thui. Nếu ô excel có hàng nghì từ thì sao? Em muốn nó hiển thị đầy trong Listbox cơ? Hoặc có thể dụng công cụ nào khác để nó hiển thị được không?
OK, nếu vậy thì dùng 2 cái Label, và sự kiện Change của ComboBox sẽ như sau:

Mã:
Private Sub ComboBox1_Change()
    With ComboBox1
        If .MatchFound Then
            Dim r As Long
            For r = 1 To .ListCount
                If PriArray(r, 1) = .Text Then
                    Label1 = PriArray(r, 2)
                    Label2 = PriArray(r, 3)
                    Exit For
                End If
            Next
        End If
    End With
End Sub
 

File đính kèm

Upvote 0
Mà thôi, khỏi For, khỏi Array gì cả, gán toàn bộ cho ComboBox, rồi lấy giá trị thôi! Bạn bỏ hết code cũ, thay bằng code này đi nhé:

Mã:
Option Explicit


Private Sub ComboBox1_Change()
    With ComboBox1
        If .MatchFound Then
            Label1 = .List(, 1)
            Label2 = .List(, 2)
        End If
    End With
End Sub


Private Sub UserForm_Initialize()
    Dim LastRow As Long
    LastRow = Sheets("dl").Range("A65536").End(xlUp).Row
    ComboBox1.List = Sheets("dl").Range("A2:A" & LastRow).Resize(, 3).Value
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom