Nhờ các anh / chị giúp em tạo Combo Box Công đoạn và giá.
Trân trọng cảm ơn
sao ko ai giúp em hết vậy. Buồn quá
Cho tôi hỏi một số vấn đề
1) Tại sao sheet DONGIA không để cột CÔNG ĐOẠN trước, ĐƠN GIÁ ở sau?
2) Tại sheet1, các ComboBox rãi rác từ cột B đến cột Q hay dài "vô tận" vậy? Tại sao không để dọc mà để nằm ngang vậy?
Có gì đâu phải buồn, chờ bao lâu mà buồn? Bạn biết kiến thức người ta có được để giải được bài toán của bạn mất bao lâu cho việc học này không?
1. Nếu vậy thì anh để cột Công đoạn trước, Đơn giá sau.
2) Tại sheet1, các ComboBox rãi rác từ cột B đến cột Q hay dài "vô tận" vậy? Tại sao không để dọc mà để nằm ngang vậy
Là do bảng của mình Tên người sắp xếp theo cột, mà mỗi người có thể làm nhiều công đoạn khác nhau, ....
Rất mong được sự giúp đỡ của anh
Thì các Combo box nằm trên hàng đó, nhưng có thể không chỉ bao nhiều CBB đó mà có thể nhiều hơn nếu phát sinh công đoạn mới, và đơn giá mớiTôi hỏi bạn ở ý 2, nếu nằm ngang thì các CBB nó nằm ở trên toàn bộ hàng đó hay chỉ ở cột B đến cột Q?
Thì các Combo box nằm trên hàng đó, nhưng có thể không chỉ bao nhiều CBB đó mà có thể nhiều hơn nếu phát sinh công đoạn mới, và đơn giá mới
Sub GetList()
Dim LstRng As Variant
LstRng = Range(Sheet2.[A2], Sheet2.[A65536].End(3)).Resize(, 2)
If IsArray(LstRng) Then
Sheet1.CbxDonGia.List = LstRng
End If
End Sub
Private Sub CbxDonGia_Change()
With Application
.EnableEvents = False
.Calculation = xlCalculationManual
With ActiveCell
If CbxDonGia.MatchFound Then
.Value = CbxDonGia.Text
.Offset(1) = CbxDonGia.List(, 1)
Else
If CbxDonGia.Visible = True Then
.Value = ""
.Offset(1) = ""
End If
End If
End With
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
Private Sub CbxDonGia_GotFocus()
If CbxDonGia.ListCount = 0 Then Call GetList
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 1 Then
If Not Intersect(Target, [C2:Q2]) Is Nothing Then
With CbxDonGia
.Top = Target.Top
.Left = Target.Left
.Width = Target.Width
.Height = Target.Height
.Text = "" 'Target.Value
.Visible = True
.Activate
'.DropDown
End With
Else
If CbxDonGia.Visible = True Then CbxDonGia.Visible = False
End If
End If
End Sub
[COLOR=#008000]'Phong khi co thay doi tren don gia:[/COLOR]
Private Sub Worksheet_Deactivate()
Call GetList
End Sub
Cám ơn anh Nghĩa rất nhiều, chúc anh gặp nhiều may mắn trong cuôc sống!Bây giờ tôi tạm thời làm từ cột C2 đến cột Q2, nếu bạn muốn thay đổi thì bạn sửa lại cho phù hợp với dữ liệu thật của bạn.
Chỉ cần 1 ComboBox thôi là đủ rồi bạn à, không cần thêm cả đống đâu!
Tạo nguồn cho ComboBox:
Mã:Sub GetList() Dim LstRng As Variant LstRng = Range(Sheet2.[A2], Sheet2.[A65536].End(3)).Resize(, 2) If IsArray(LstRng) Then Sheet1.CbxDonGia.List = LstRng End If End Sub
Mã:Private Sub CbxDonGia_Change() With Application .EnableEvents = False .Calculation = xlCalculationManual With ActiveCell If CbxDonGia.MatchFound Then .Value = CbxDonGia.Text .Offset(1) = CbxDonGia.List(, 1) Else If CbxDonGia.Visible = True Then .Value = "" .Offset(1) = "" End If End If End With .Calculation = xlCalculationAutomatic .EnableEvents = True End With End Sub Private Sub CbxDonGia_GotFocus() If CbxDonGia.ListCount = 0 Then Call GetList End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Selection.Count = 1 Then If Not Intersect(Target, [C2:Q2]) Is Nothing Then With CbxDonGia .Top = Target.Top .Left = Target.Left .Width = Target.Width .Height = Target.Height .Text = "" 'Target.Value .Visible = True .Activate '.DropDown End With Else If CbxDonGia.Visible = True Then CbxDonGia.Visible = False End If End If End Sub
Riêng vấn đề sắp xếp, tự bạn sắp xếp tại sheet DONGIA là được!
Trong CBB em chỉnh lại thuôc tính columnheads = true, nhưng sau nó không hiện dòng tiêu đề vậy anh?
Sub GetList() Dim LstRng As Variant LstRng = Range(Sheet2.[A2], Sheet2.[A65536].End(3)).Resize(, 2)
Code của anh là A2
Khi em sữa lại thành A1 thì nó hiện lấy luôn dòng tiêu đề là Công đoạn và đơn giá.
Với lai trong CBB làm sao mình cho nó hiện thị dâu phận cách phần ngàn vậy anh.
VD Cột đơn giá hiện tai thì nó hiển thị là 1000, nay em muốn hiện thị thành 1.000
Code của anh là A2
Khi em sữa lại thành A1 thì nó hiện lấy luôn dòng tiêu đề là Công đoạn và đơn giá.
Với lai trong CBB làm sao mình cho nó hiện thị dâu phận cách phần ngàn vậy anh.
VD Cột đơn giá hiện tai thì nó hiển thị là 1000, nay em muốn hiện thị thành 1.000
Với đoạn code trên là các CBB theo dòng hàng ngang. Em cũng đã áp dụng vào thực tế rất là hữu ích và tiện lợi.Bây giờ tôi tạm thời làm từ cột C2 đến cột Q2, nếu bạn muốn thay đổi thì bạn sửa lại cho phù hợp với dữ liệu thật của bạn.
Chỉ cần 1 ComboBox thôi là đủ rồi bạn à, không cần thêm cả đống đâu!
Tạo nguồn cho ComboBox:
Mã:Sub GetList() Dim LstRng As Variant LstRng = Range(Sheet2.[A2], Sheet2.[A65536].End(3)).Resize(, 2) If IsArray(LstRng) Then Sheet1.CbxDonGia.List = LstRng End If End Sub
Mã:Private Sub CbxDonGia_Change() With Application .EnableEvents = False .Calculation = xlCalculationManual With ActiveCell If CbxDonGia.MatchFound Then .Value = CbxDonGia.Text .Offset(1) = CbxDonGia.List(, 1) Else If CbxDonGia.Visible = True Then .Value = "" .Offset(1) = "" End If End If End With .Calculation = xlCalculationAutomatic .EnableEvents = True End With End Sub Private Sub CbxDonGia_GotFocus() If CbxDonGia.ListCount = 0 Then Call GetList End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Selection.Count = 1 Then If Not Intersect(Target, [C2:Q2]) Is Nothing Then With CbxDonGia .Top = Target.Top .Left = Target.Left .Width = Target.Width .Height = Target.Height .Text = "" 'Target.Value .Visible = True .Activate '.DropDown End With Else If CbxDonGia.Visible = True Then CbxDonGia.Visible = False End If End If End Sub
Riêng vấn đề sắp xếp, tự bạn sắp xếp tại sheet DONGIA là được!
Với đoạn code trên là các CBB theo dòng hàng ngang. Em cũng đã áp dụng vào thực tế rất là hữu ích và tiện lợi.
Nay em muốn làm thêm 1 CBB cho cột thì mình phải chĩnh sữa code như thế nào vậy anh.
Do file excel của em 2 người dùng cùng 1 lúc nên bật chế độ Shared, thì các Combo Box báo lỗi, unable to set the top property of the oleobject class.
Lỗi này là lỗi gì vậy các anh/chị.