Hỏi về combobox (1 người xem)

Liên hệ QC

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

kawaicandy

Thành viên chính thức
Tham gia
2/4/11
Bài viết
69
Được thích
9
Xin chào các bạn. Mình có 1 file dữ liệu bao gồm 2 sheet Data và Solieu, mình tạo 1 userform gồm 1 Combobox và 6 textbox để lấy dữ liệu từ sheet "Data" nhập vào sheet "Solieu". Loay hoay mãi vẫn không đc nên lên đây nhờ các bạn chỉ giáo thêm giúp. Yêu cầu:
- Combobox mình muốn list ra "Loại dây" từ bên Data với điều kiện dữ liệu bên Data có thể add thêm vào sau này (Offset...)
- Tại các textbox mình muốn tham chiếu theo Combobox.
- Khi click "Nhập" thì các tham số trong userform sẽ nhập vào bên Solieu.
Nói có vẻ khó hỉu nên mình gởi file lên nhờ các bạn giúp.
Cảm ơn các bạn rất nhìu!!!!
 

File đính kèm

Ở sheet DATA, tôi thấy các cột, chỉ có 1 cột là tôi biết nó là loại dây, còn tiết diện, đường kính .... tôi biết được "chết liền" đó. Tôi không biết nó là các cột nào ở sheet này thì làm sao hiển thị nó lên trên Form cho bạn được?
 
Upvote 0
Ở sheet DATA, tôi thấy các cột, chỉ có 1 cột là tôi biết nó là loại dây, còn tiết diện, đường kính .... tôi biết được "chết liền" đó. Tôi không biết nó là các cột nào ở sheet này thì làm sao hiển thị nó lên trên Form cho bạn được?
Hì, xin lỗi bạn có thể mình nói chưa rõ, đường kính là cột F bên sheet Data, còn tiết diện là cột E. Bạn có thể làm dùm mình 2 cái đấy thôi cũng đc, còn mấy cái khác tự mình sẽ suy ra
Cảm ơn bạn đã giúp đỡ.
À nói thêm nữa là cột E và F bạn có thể dùng vòng lập for nhưng các cột khác ở rời rạc nên mỗi ô bạn xài 1 code tham chiếu riêng giúp mình để mình ứng dụng vào các ô khác. Cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Hì, xin lỗi bạn có thể mình nói chưa rõ, đường kính là cột F bên sheet Data, còn tiết diện là cột E. Bạn có thể làm dùm mình 2 cái đấy thôi cũng đc, còn mấy cái khác tự mình sẽ suy ra
Cảm ơn bạn đã giúp đỡ.
À nói thêm nữa là cột E và F bạn có thể dùng vòng lập for nhưng các cột khác ở rời rạc nên mỗi ô bạn xài 1 code tham chiếu riêng giúp mình để mình ứng dụng vào các ô khác. Cảm ơn
Bạn cứ kê khai ra hết đi, chẳng có vòng lặp vòng liếc gì cả. Sau khi có nguồn ban đầu thì bấm vào combobox tự nó sẽ điền vào các dữ liệu các textbox còn lại.

Loại dây - cột B
Tiết diện - cột E
Đường kính - cột F
Môđun đàn hồi - cột ?
hệ số giãn nở nhiệt - cột ?
Trọng lượng riêng - cột ?
Ứng suất kéo đứt - cột ?

Chẳng lẽ có 4 cột nữa bạn lại tiết kiệm với những người muốn giúp bạn sao? Nguyên tắc của tôi thà nói một lần, làm lắc nhắc rồi hỏi đi hỏi lại mất công phiền phức và mất thời gian lắm!
 
Upvote 0
Hì, sợ làm phiền bạn.
Loại dây - cột B
Đường kính - F
Tiết diện - E
Hệ số giãn nở nhiệt - J
Môđun đàn hồi - K
Ứng suất kéo đứt - N
Trọng lượng riêng - S
Cái quan trọng là làm sao sau này cái bảng dư liệu sau này mình thêm vào thì trong Combobox cũng có chứ ko cần viết lại code bạn ah. Thêm nữa nếu được thì thêm 2 cái opt "AC" và "A" để khi mình tick vào cái nào thì trong combobox chỉ list ra loại đấy.
Cảm ơn bạn rất nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Hì, sợ làm phiền bạn.
Loại dây - cột B
Đường kính - F
Tiết diện - E
Hệ số giãn nở nhiệt - J
Môđun đàn hồi - K
Ứng suất kéo đứt - N
Trọng lượng riêng - S
Cái quan trọng là làm sao sau này cái bảng dư liệu sau này mình thêm vào thì trong Combobox cũng có chứ ko cần viết lại code bạn ah. Thêm nữa nếu được thì thêm 2 cái opt "AC" và "A" để khi mình tick vào cái nào thì trong combobox chỉ list ra loại đấy.
Cảm ơn bạn rất nhiều

Vì thêm cho bạn 2 cái OptionButton nên tôi viết code thế này:

Khởi động Form:

[GPECODE=vb]Option Explicit
Dim A_Array(), AC_Array()


Private Sub UserForm_Initialize()
Dim sArray(), ColArray(), A_RowArray(), AC_RowArray(), _
r As Long, c As Long, n As Long, m As Long, uc As Long

sArray = Range(Sheets("Data").Range("B6"), Sheets("Data").Range("B65536").End(xlUp)).Resize(, 18)
ColArray = Array(0, 1, 4, 5, 10, 9, 18, 13)
uc = UBound(ColArray)


For r = 1 To UBound(sArray)
If Left(sArray(r, 1), 2) = "AC" Then
n = n + 1
ReDim Preserve AC_RowArray(1 To n)
AC_RowArray(n) = r
ElseIf Left(sArray(r, 1), 1) = "A" Then
m = m + 1
ReDim Preserve A_RowArray(1 To m)
A_RowArray(m) = r
End If
Next

If n Then
ReDim AC_Array(1 To n, 1 To uc)
For r = 1 To n
For c = 1 To uc
AC_Array(r, c) = sArray(AC_RowArray(r), ColArray(c))
Next
Next
End If

If m Then
ReDim A_Array(1 To m, 1 To uc)
For r = 1 To m
For c = 1 To uc
A_Array(r, c) = sArray(A_RowArray(r), ColArray(c))
Next
Next
End If

End Sub[/GPECODE]

Hoạt động của OptionButton:

Mã:
Private Sub OptionButton1_Change()
    ComboBox1.Text = ""
    ComboBox1.List = A_Array
End Sub


Private Sub OptionButton2_Change()
    ComboBox1.Text = ""
    ComboBox1.List = AC_Array
End Sub

Hoạt động của ComboBox:

Mã:
Private Sub ComboBox1_Change()
    Dim i As Long
    For i = 1 To 6
        Me("TextBox" & i).Text = ""
    Next
    With ComboBox1
        If .MatchFound Then
            For i = 1 To 6
                Me("TextBox" & i).Text = .List(, i)
            Next
        End If
    End With
End Sub

Và hoạt động của CommandButton:

Mã:
Private Sub CommandButton1_Click()
    If ComboBox1 <> "" Then
        Dim sArray(1 To 7, 1 To 1), i As Long
        sArray(1, 1) = ComboBox1.Text
        For i = 1 To 6
            sArray(i + 1, 1) = Me("TextBox" & i).Text
        Next
    End If
    Sheets("Solieu").Range("D5:D11") = sArray
End Sub

Bạn xem file xem có đúng ý bạn chưa nhé.
 

File đính kèm

Upvote 0
Hay quá bạn ah, đúng ý mình rồi
Cảm ơn bạn rất nhiều, mình sẽ nghiên cứu thêm có j không hiểu xin bạn chỉ giáo thêm cho
 
Upvote 0
Bây giờ bên sheet Data mình chèn thêm các loại dây khác chẳng hạn như M-16, AV-25 và trong userform mình thêm 2 opt nữa cho phù hợp (AC, A, AV, M) lúc đó thì mình thêm tương tự đoạn code sau nhưng sao nó ko chạy, bạn xem giúp mình tí
Mã:
   Dim A_Array(), AC_Array(), AV_Array(), M_Array()

Private Sub UserForm_Initialize()
    Dim sArray(), ColArray(), A_RowArray(), AC_RowArray(), AV_RowArray(), M_RowArray(), _
        r As Long, c As Long, n As Long, m As Long, o As Long, p As Long, uc As Long
    
    sArray = Range(Sheets("Data").Range("B6"), Sheets("Data").Range("B65536").End(xlUp)).Resize(, 18)
    ColArray = Array(0, 1, 4, 5, 10, 9, 18, 13)
    uc = UBound(ColArray)

    For r = 1 To UBound(sArray)
        If Left(sArray(r, 1), 2) = "AC" Then
            n = n + 1
            ReDim Preserve AC_RowArray(1 To n)
            AC_RowArray(n) = r
        ElseIf Left(sArray(r, 1), 2) = "AV" Then
            o = o + 1
            ReDim Preserve AV_RowArray(1 To o)
            AV_RowArray(o) = r
        ElseIf Left(sArray(r, 1), 1) = "A" Then
            m = m + 1
            ReDim Preserve A_RowArray(1 To m)
            A_RowArray(m) = r
        ElseIf Left(sArray(r, 1), 1) = "M" Then
            p = p + 1
            ReDim Preserve M_RowArray(1 To p)
            M_RowArray(p) = r
        End If
    Next
    
    If n Then
        ReDim AC_Array(1 To n, 1 To uc)
        For r = 1 To n
            For c = 1 To uc
                AC_Array(r, c) = sArray(AC_RowArray(r), ColArray(c))
            Next
        Next
    End If
    
    If o Then
        ReDim AV_Array(1 To o, 1 To uc)
        For r = 1 To n
            For c = 1 To uc
                AV_Array(r, c) = sArray(AV_RowArray(r), ColArray(c))
            Next
        Next
    End If
    
    If m Then
        ReDim A_Array(1 To m, 1 To uc)
        For r = 1 To m
            For c = 1 To uc
                A_Array(r, c) = sArray(A_RowArray(r), ColArray(c))
            Next
        Next
    End If 
    If p Then
        ReDim A_Array(1 To p, 1 To uc)
        For r = 1 To p
            For c = 1 To uc
                M_Array(r, c) = sArray(M_RowArray(r), ColArray(c))
            Next
        Next
    End If
    
End Sub
Code của opt
Mã:
Private Sub OptionButton1_Change()
    ComboBox1.Text = ""
    ComboBox1.List = A_Array
End Sub

Private Sub OptionButton2_Change()
    ComboBox1.Text = ""
    ComboBox1.List = AC_Array
End Sub
Private Sub OptionButton3_Change()
    ComboBox1.Text = ""
    ComboBox1.List = AV_Array
End Sub
Private Sub OptionButton4_Change()
    ComboBox1.Text = ""
    ComboBox1.List = M_Array
End Sub
 
Upvote 0
Bây giờ bên sheet Data mình chèn thêm các loại dây khác chẳng hạn như M-16, AV-25 và trong userform mình thêm 2 opt nữa cho phù hợp (AC, A, AV, M) lúc đó thì mình thêm tương tự đoạn code sau nhưng sao nó ko chạy, bạn xem giúp mình tí
Mã:
[COLOR=#ff0000]    If o Then
        ReDim AV_Array(1 To o, 1 To uc)
        For r = [/COLOR][COLOR=#0000ff][B]1 To n[/B][/COLOR][COLOR=#ff0000]
            For c = 1 To uc
                AV_Array(r, c) = sArray(AV_RowArray(r), ColArray(c))
            Next
        Next
    End If[/COLOR]

Bạn làm không đồng bộ nên bị lỗi:

Mã:
    If [COLOR=#ff0000][B]o[/B][/COLOR] Then
        ReDim AV_Array(1 To [B][COLOR=#ff0000]o[/COLOR][/B], 1 To uc)
        For r = [B][COLOR=#ff0000]1 To o[/COLOR][/B]
            For c = 1 To uc
                AV_Array(r, c) = sArray(AV_RowArray(r), ColArray(c))
            Next
        Next
    End If
 
Lần chỉnh sửa cuối:
Upvote 0
Hì mình làm đi làm lại vẫn không được bạn ah, nó báo lỗi "Subscript out of range"
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Upvote 0
ẹc, bó tay loay hoay cả chìu dò code lên dò code xuống mãi vẫn ko đc. Pro có khác. Vào so sánh xem thử sai chỗ nào
Cảm ơn bạn rất là nhiều
 
Upvote 0
ẹc, bó tay loay hoay cả chìu dò code lên dò code xuống mãi vẫn ko đc. Pro có khác. Vào so sánh xem thử sai chỗ nào
Cảm ơn bạn rất là nhiều

Nên nhớ, với cơ sở dữ liệu thì không nên cách dòng đâu nha bạn, tôi thấy bạn để 1 hàng trống giữa 2 loại dây đấy!

Vấn đề phân loại dây, để tạo mảng cho các Option, thì cái nào có LEN nhiều hơn thì bắt buộc làm trước rồi tuần tự cho đến LEN bằng 1 (Left(sArray(r, 1), 2) = "AC"), tôi nói vậy chắc bạn hiểu nhỉ?
 
Upvote 0
Ok mình hiểu rồi, bên cơ sở dữ liệu do mình chỉ đưa ra ví dụ thôi chứ phải cập nhập rất nhiều loại dây
Cảm ơn bạn
 
Upvote 0

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

Back
Top Bottom