Tạo Combo Box (1 người xem)

Liên hệ QC

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

Excel365

Thành viên tích cực
Tham gia
29/10/10
Bài viết
865
Được thích
127
Giới tính
Nam
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
 

File đính kèm

sao ko ai giúp em hết vậy. Buồn quá
 
Upvote 0
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

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?

sao ko ai giúp em hết vậy. Buồn quá

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?
 
Upvote 0
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



 
Upvote 0
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




Tô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?
 
Upvote 0
Tô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
 
Upvote 0
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

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!
 

File đính kèm

Upvote 0
Cũng lưu ý với bạn rằng, trong môi trường Module của sheet DONGIA, tôi có đặt thủ tục này, bạn chớ bỏ qua nó nhé:

Mã:
[COLOR=#008000]'Phong khi co thay doi tren don gia:[/COLOR]
Private Sub Worksheet_Deactivate()
    Call GetList
End Sub
 
Upvote 0
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!
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!
 
Upvote 0
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?
 
Upvote 0
Em chỉnh lại được rồi anh ơi
 
Upvote 0
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?

Khi nạp dữ liệu cho ComboBox có 3 phương pháp.

1) Nạp bằng RowSource/ ListFillRange là ta liên kết đến một vùng hoặc 1 name trên sheet (làm trực tiếp trong Properties).

2) Nạp bằng List thì ta dùng mảng (Array).

3) Dùng bằng cách Add Item.

Khi bạn muốn có ColumnHead, thì bạn chỉ có thể dùng được với cách nạp 1 mà thôi, không thể dùng ở các cách khác được.

Với File tôi gửi cho bạn, tôi nạp dữ liệu cho CBB bằng cách 2.
 
Upvote 0
Code của anh là A2

Sub GetList() Dim LstRng As Variant LstRng = Range(Sheet2.[A2], Sheet2.[A65536].End(3)).Resize(, 2)


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
 
Upvote 0
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

Bó cái tay! cái vụ hiển thị theo định dạng như thế. Định dạng tại cells còn combobox chỉ nhập liệu cho nhanh thôi mà.
 
Upvote 0
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

Bạn thử nghiên cứu thêm bài này xem sao?
http://www.giaiphapexcel.com/forum/showthread.php?78558-Hỏi-thêm-về-Combox
 
Upvote 0
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.
 
Upvote 0
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ị.
 
Upvote 0
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.

Cột dọc thì làm như sau:

If Not Intersect(Target, [C2:Q2]) Is Nothing Then

Giả sử muốn là Cột B từ ô B2 đến B100 thì sửa lại thành:

If Not Intersect(Target, [B2:B100]) Is Nothing Then

Tất cả cái nào là: .Offset(1) thì sửa lại là: .Offset(,1)


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ị.

Tôi chưa bao giờ dùng Share nên chưa biết cách nào để xử lý việc báo lỗi này.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom