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!!!!
Ở 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?
Ở 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
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!
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
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
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â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
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]
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
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ỉ?