Xin giúp đỡ tạo useform (combobox) (1 người xem)

Liên hệ QC

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

langtuchungtinh360

Thành viên đã dừng hoạt động
Tham gia
7/10/13
Bài viết
1,062
Được thích
334
Nhờ mọi người giúp mình tạo useform như hình
thứ nhất:
2 combobox sẽ lấy dữ liệu của cột a và b (nếu được)
tức là combobox khi nhấn vào sẽ hiện dữ liệu của cột b, có thêm cột a càng tốt (như trên listbox ấy)


ở combox 1 nếu chọn c thì ở combobox 2 chỉ thể hiện dữ liệu từ d trở xuống
tương tự nếu chọn ở combobox 2 là h thì ở combobox 1 chỉ thể hiện từ a đền g
(nếu 2 ý trên không được thì cứ hiện dữ liệu bình thường hết trơn cũng được- nếu dữ liệu có thêm dòng hay bớt dòng thì form cũng cập nhật lại- không muốn lấy dữ liệu cố định về số dòng vào combobox)

nhấn ok thì sẽ hiện ra msgbox 2 giá trị ở trên
ví dụ combobox 1 chọn b
combox 2 chọn l
nhấn ok sẽ hiện msgbox 7 & 17
mong mọi người giúp đỡ
13131.png
 

File đính kèm

Lần chỉnh sửa cuối:
Nhờ mọi người giúp mình tạo useform như hình
thứ nhất:
2 combobox sẽ lấy dữ liệu của cột a và b (nếu được)
tức là combobox khi nhấn vào sẽ hiện dữ liệu của cột b, có thêm cột a càng tốt (như trên listbox ấy)


ở combox 1 nếu chọn c thì ở combobox 2 chỉ thể hiện dữ liệu từ d trở xuống
tương tự nếu chọn ở combobox 2 là h thì ở combobox 1 chỉ thể hiện từ a đền g
(nếu 2 ý trên không được thì cứ hiện dữ liệu bình thường hết trơn cũng được- nếu dữ liệu có thêm dòng hay bớt dòng thì form cũng cập nhật lại- không muốn lấy dữ liệu cố định về số dòng vào combobox)

nhấn ok thì sẽ hiện ra msgbox 2 giá trị ở trên
ví dụ combobox 1 chọn b
combox 2 chọn l
nhấn ok sẽ hiện msgbox 7 & 17
mong mọi người giúp đỡ
View attachment 150443
Làm vụ này chi vậy ta, làm theo cách củ chuối của mình hy vọng giúp ích được bạn.
 

File đính kèm

Upvote 0
Làm vụ này chi vậy ta, làm theo cách củ chuối của mình hy vọng giúp ích được bạn.
thầy giúp em tí nữa được không thầy. có lẽ cách diễn đạt của em bị sai nên thầy hiểu nhầm. ý em là hiển thị cột A trước cột B(cột số trước cột chữ) , sau khi chọn xong thì ở combobox hiện giá trị ở cột B (chữ), nhấn ok thì hiện ra số tương ứng.
em có sửa lại thế này
Mã:
Private Sub UserForm_Initialize()
m = Range("A1").End(xlDown).Row
ReDim mang(1 To m, 1 To 2)
For i = 1 To m
     mang(i, 1) = Cells(i, [COLOR=#ff0000]1[/COLOR]).Value
     mang(i, 2) = Cells(i, [COLOR=#ff0000]2[/COLOR]).Value
Next i
ComboBox1.List = mang
ComboBox2.List = mang
End Sub

Mã:
Private Sub ComboBox1_Change()
Dim mang1() As String, bt As Long
bt = WorksheetFunction.Match(ComboBox1.Text, [COLOR=#0000ff]Range[/COLOR]("[COLOR=#ff0000]A1:A[/COLOR]" & m), 0) ' tìm số 6 trong cột A nhưng lại bị báo lỗi
ReDim mang1(bt To m, 1 To 2)
For i = bt To m
   mang1(i, 1) = [COLOR=#0000ff]Cells[/COLOR](i, 2).Value
   mang1(i, 2) = [COLOR=#0000ff]Cells[/COLOR](i, 1).Value
Next i
ComboBox2.List = mang1
End Sub
chỗ màu xanh ấy nếu em đang chọn sheet2 để chạy code thì sửa lại Sheet1.Range với Sheet1.Cells sao thầy
 
Upvote 0
thầy giúp em tí nữa được không thầy. có lẽ cách diễn đạt của em bị sai nên thầy hiểu nhầm. ý em là hiển thị cột A trước cột B(cột số trước cột chữ) , sau khi chọn xong thì ở combobox hiện giá trị ở cột B (chữ), nhấn ok thì hiện ra số tương ứng.
em có sửa lại thế này
Mã:
Private Sub UserForm_Initialize()
m = Range("A1").End(xlDown).Row
ReDim mang(1 To m, 1 To 2)
For i = 1 To m
     mang(i, 1) = Cells(i, [COLOR=#ff0000]1[/COLOR]).Value
     mang(i, 2) = Cells(i, [COLOR=#ff0000]2[/COLOR]).Value
Next i
ComboBox1.List = mang
ComboBox2.List = mang
End Sub

Mã:
Private Sub ComboBox1_Change()
Dim mang1() As String, bt As Long
bt = WorksheetFunction.Match(ComboBox1.Text, [COLOR=#0000ff]Range[/COLOR]("[COLOR=#ff0000]A1:A[/COLOR]" & m), 0) ' tìm số 6 trong cột A nhưng lại bị báo lỗi
ReDim mang1(bt To m, 1 To 2)
For i = bt To m
   mang1(i, 1) = [COLOR=#0000ff]Cells[/COLOR](i, 2).Value
   mang1(i, 2) = [COLOR=#0000ff]Cells[/COLOR](i, 1).Value
Next i
ComboBox2.List = mang1
End Sub
chỗ màu xanh ấy nếu em đang chọn sheet2 để chạy code thì sửa lại Sheet1.Range với Sheet1.Cells sao thầy
Nếu cột A hiện trước cột B thì đơn giản hơn. Còn combobox lấy giá trị cột 2 thì mình chịu, trình độ chưa tới được. Bạn hỏi anh em coi, mình nghĩ nó nằm ở chổ thiết lập Properties nhưng sao mò mãi vẫn không ra.
 

File đính kèm

Upvote 0
Góp ý:

1/ Sheet1 bạn nên Insert xuống vài dòng và nên có tiêu đề cột đầy đủ, còn để như vậy có thể phải sửaa đi sửa lại nhiều lần (nhằm tránh phiền hà cho người giúp).

2/ Ý bạn muốn khi chọn ComboBox1 thì ComboBox2 sẽ hiện nội dung tương ứng (bạn diễn giải chưa rỏ ràng nên chẳng hiểu mô tê gì ???).
 
Upvote 0
thích nghịch này
Mã:
Private Sub ComboBox1_Change()
Dim r As Long
If ComboBox1.ListIndex > -1 Then
    Application.EnableEvents = False
    r = Sheet1.Range("A1:A20").Find(ComboBox1.Text, , xlValues, xlWhole, , , True).Row
    If r < 20 Then
        ComboBox2.List = Sheet1.Range("A" & r + 1 & ":B20").Value
    Else
        ComboBox2.Clear
    End If
    ComboBox1.Text = ComboBox1.List(ComboBox1.ListIndex, 1)
    Application.EnableEvents = True
End If
End Sub


Private Sub ComboBox2_Change()
Dim r As Long
If ComboBox2.ListIndex > -1 Then
    Application.EnableEvents = False
    r = Sheet1.Range("A1:A20").Find(ComboBox2.Text, , xlValues, xlWhole, , , True).Row
    If r > 1 Then
        ComboBox1.List = Sheet1.Range("A1:B" & r - 1).Value
    Else
        ComboBox1.Clear
    End If
    ComboBox2.Text = ComboBox2.List(ComboBox2.ListIndex, 1)
    Application.EnableEvents = True
End If
End Sub


Private Sub CommandButton1_Click()
Dim rg1 As Range, rg2 As Range
Set rg1 = Sheet1.Range("B1:B20").Find(ComboBox1.Text, , xlValues, xlWhole, , , True)
Set rg2 = Sheet1.Range("B1:B20").Find(ComboBox2.Text, , xlValues, xlWhole, , , True)
If Not rg1 Is Nothing And Not rg2 Is Nothing Then
    MsgBox rg1.Offset(, -1).Value & "&" & rg2.Offset(, -1).Value
Else
    MsgBox "hello world"
End If
End Sub


Private Sub UserForm_Initialize()
ComboBox1.ColumnCount = 2
ComboBox1.List = Sheet1.Range("A1:B20").Value
ComboBox2.ColumnCount = 2
ComboBox2.List = ComboBox1.List
End Sub
 
Upvote 0
thích nghịch này
Mã:
Private Sub ComboBox1_Change()
Dim r As Long
If ComboBox1.ListIndex > -1 Then
    Application.EnableEvents = False
    r = Sheet1.Range("A1:A20").Find(ComboBox1.Text, , xlValues, xlWhole, , , True).Row
    If r < 20 Then
        ComboBox2.List = Sheet1.Range("A" & r + 1 & ":B20").Value
    Else
        ComboBox2.Clear
    End If
    ComboBox1.Text = ComboBox1.List(ComboBox1.ListIndex, 1)
    Application.EnableEvents = True
End If
End Sub


Private Sub ComboBox2_Change()
Dim r As Long
If ComboBox2.ListIndex > -1 Then
    Application.EnableEvents = False
    r = Sheet1.Range("A1:A20").Find(ComboBox2.Text, , xlValues, xlWhole, , , True).Row
    If r > 1 Then
        ComboBox1.List = Sheet1.Range("A1:B" & r - 1).Value
    Else
        ComboBox1.Clear
    End If
    ComboBox2.Text = ComboBox2.List(ComboBox2.ListIndex, 1)
    Application.EnableEvents = True
End If
End Sub


Private Sub CommandButton1_Click()
Dim rg1 As Range, rg2 As Range
Set rg1 = Sheet1.Range("B1:B20").Find(ComboBox1.Text, , xlValues, xlWhole, , , True)
Set rg2 = Sheet1.Range("B1:B20").Find(ComboBox2.Text, , xlValues, xlWhole, , , True)
If Not rg1 Is Nothing And Not rg2 Is Nothing Then
    MsgBox rg1.Offset(, -1).Value & "&" & rg2.Offset(, -1).Value
Else
    MsgBox "hello world"
End If
End Sub


Private Sub UserForm_Initialize()
ComboBox1.ColumnCount = 2
ComboBox1.List = Sheet1.Range("A1:B20").Value
ComboBox2.ColumnCount = 2
ComboBox2.List = ComboBox1.List
End Sub
Thì ra là chổ này Application.EnableEvents = False
Em thực hiện toàn bị báo lỗi, vậy mà không nghĩ ngay đến chổ này nhỉ.
 
Upvote 0
Cách sử lý của doveandrose dùng phương thức Find mình thấy có thể phát sinh sai sót. Tác giả không nói đây là danh sách dạng duy nhất vậy trường hợp trùng nhau trên cột A sẽ sai lệch thông tin trên cột B.
Mình tham gia cách dùng biến để lưu (Phần dữ liệu động chủ Topic tự làm nha)

Mã:
Dim Luu(1, 2)
Sub SetComb2()
Dim Rg As Range, Fr
Me.ComboBox2.Clear
Me.ComboBox2.Text = ""
Fr = Luu(0, 2)
If Fr < Me.ComboBox1.ListCount - 1 Then
Set Rg = Range(Sheet1.Range("A1:B20").Cells(Fr + 2, 1), Sheet1.[B20])
Me.ComboBox2.List = Rg.Value
Me.ComboBox2.ListIndex = 0
End If
End Sub

'------------------------------------------------------------
Private Sub ComboBox1_Click()
On Error Resume Next
Luu(0, 0) = Me.ComboBox1.Column(0)
Luu(0, 1) = Me.ComboBox1.Column(1)
Luu(0, 2) = Me.ComboBox1.ListIndex
SetComb2
Me.ComboBox1.Text = "(" & Luu(0, 0) & ")-" & Luu(0, 1)
End Sub

'------------------------------------------------------------
Private Sub ComboBox2_Click()
Luu(1, 0) = Me.ComboBox2.Column(0)
Luu(1, 1) = Me.ComboBox2.Column(1)
Luu(1, 2) = Me.ComboBox2.ListIndex
Me.ComboBox2.Text = "(" & Luu(1, 0) & ")-" & Luu(1, 1)
End Sub

'---------------------------------------------------------------------------
Private Sub CommandButton1_Click()
MsgBox "Combobox1 chon:   " & Luu(0, 0) & Chr(13) & "Combobox2 chon:   " & Luu(1, 0)
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub

'---------------------------------------------------------------------------
Private Sub UserForm_Initialize()
ComboBox1.List = Sheet1.Range("A1:B20").Value
ComboBox1.ListIndex = 0
SetComb2
End Sub
 

File đính kèm

Upvote 0
Cảm ơn mọi người đã tận tình giúp đỡ em.
Mỗi cách đều có mỗi đặc điểm riêng
chắc là phải phụ thầy giaiphap lấy code của "Thánh soi" rồi (được thêm cột A- dễ chọn hơn)
To sealand
cảm ơn bác đã quan tâm do cột A là STT nên không thể trùng nhau được, còn cột B thì hên xui.
do cột A kết hợp với cột B nên chắc là không chọn nhầm
để em áp dụng mấy code trên vào add ins của em đã. nếu không có gì bất trắc thì xử dụng luôn. còn không thì dòm ngó code của bác tiếp (mong bác đừng buồn nếu code của bác lại nằm trong lựa chọn sau cùng của em)
một lần nữa xin cảm ơn mọi người nhiều.
mục đích của cái này chỉ là chọn 1 vùng để in dữ liệu thôi ạ. (khác với in từ trang đến trang.... trong lựa chọn in của excel)
 
Upvote 0
Cảm ơn mọi người đã tận tình giúp đỡ em.
Mỗi cách đều có mỗi đặc điểm riêng
chắc là phải phụ thầy giaiphap lấy code của "Thánh soi" rồi (được thêm cột A- dễ chọn hơn)
To sealand
cảm ơn bác đã quan tâm do cột A là STT nên không thể trùng nhau được, còn cột B thì hên xui.
do cột A kết hợp với cột B nên chắc là không chọn nhầm
để em áp dụng mấy code trên vào add ins của em đã. nếu không có gì bất trắc thì xử dụng luôn. còn không thì dòm ngó code của bác tiếp (mong bác đừng buồn nếu code của bác lại nằm trong lựa chọn sau cùng của em)
một lần nữa xin cảm ơn mọi người nhiều.
mục đích của cái này chỉ là chọn 1 vùng để in dữ liệu thôi ạ. (khác với in từ trang đến trang.... trong lựa chọn in của excel)

code ở trên của tôi đòi hỏi cả cột A và B đều phải là mang các giá trị duy nhất , nếu không được như vậy thì phải viết code lại , nhưng cần có file thật , chứ tôi không thích chơi với file xạo
 
Upvote 0
code ở trên của tôi đòi hỏi cả cột A và B đều phải là mang các giá trị duy nhất , nếu không được như vậy thì phải viết code lại , nhưng cần có file thật , chứ tôi không thích chơi với file xạo
file thật thì hiện tại chưa có cái nào trùng đối với dữ liệu hiện tại
nhưng ở biên bản của cống thì chắc là có.
bác cứ sửa đại chỗ nào của tại cột B của sheet "TAILIEU" đi rồi làm thử
add thêm add ins kèm theo luôn nha bác
nhấn vô "In từ" của Group "In Ấn" nha bác nha
nội dung code trong module
aLenhTrenThanhRibbon
 

File đính kèm

Upvote 0
file thật thì hiện tại chưa có cái nào trùng đối với dữ liệu hiện tại
nhưng ở biên bản của cống thì chắc là có.
bác cứ sửa đại chỗ nào của tại cột B của sheet "TAILIEU" đi rồi làm thử
add thêm add ins kèm theo luôn nha bác
nhấn vô "In từ" của Group "In Ấn" nha bác nha
nội dung code trong module
aLenhTrenThanhRibbon

Mã:
Private Sub ComboBox1_Click()
Dim r As Long
If ComboBox1.ListIndex > -1 Then
    r = Sheets("TAILIEU").Range("A3:A" & m).Find(ComboBox1.text, , xlValues, xlWhole, , , True).Row
    If r < m Then
        ComboBox2.List = Sheets("TAILIEU").Range("A" & r + 1 & ":B" & m).Value
    Else
        ComboBox2.Clear
    End If
    ComboBox1.ControlTipText = ComboBox1.text
    ComboBox1.text = ComboBox1.List(ComboBox1.ListIndex, 1)
End If
End Sub


Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If ComboBox1.ListIndex = -1 Then ComboBox1.ControlTipText = ""
End Sub


Private Sub ComboBox2_Click()
Dim r As Long
If ComboBox2.ListIndex > -1 Then
    r = Sheets("TAILIEU").Range("A3:A" & m).Find(ComboBox2.text, , xlValues, xlWhole, , , True).Row
    If r > 3 Then
        ComboBox1.List = Sheets("TAILIEU").Range("A3:B" & r - 1).Value
    Else
        ComboBox1.Clear
    End If
    ComboBox2.ControlTipText = ComboBox2.text
    ComboBox2.text = ComboBox2.List(ComboBox2.ListIndex, 1)
End If
End Sub


Private Sub ComboBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If ComboBox2.ListIndex = -1 Then ComboBox2.ControlTipText = ""
End Sub


Private Sub CommandButton1_Click()
If Len(ComboBox1.ControlTipText) > 0 And Len(ComboBox2.ControlTipText) > 0 Then
    MsgBox ComboBox1.ControlTipText & "&" & ComboBox2.ControlTipText
Else
    MsgBox "hello world"
End If
End Sub




Private Sub CommandButton2_Click()
Unload Me
End Sub


Private Sub UserForm_Initialize()
m = Sheets("TAILIEU").[A65536].End(xlUp).Row
ComboBox1.ColumnCount = 2
ComboBox1.List = Sheets("TAILIEU").Range("A3:B" & m).Value
ComboBox2.ColumnCount = 2
ComboBox2.List = ComboBox1.List
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom