MinhKhai
Giải pháp Ếc-xào
- Tham gia
- 16/4/08
- Bài viết
- 941
- Được thích
- 574
Bạn làm vầy xemEm đã biết dùng VBA để sắp xếp dữ liệu thông qua nút lệnh Command Button. (do em record macro).
Tuy nhiên em chưa biết cách để sắp xếp theo tiêu chí dựa trên giá trị của 1 ô.
Xin các tiền bối giúp
Private Sub CommandButton1_Click()
On Error Resume Next
Range("A7:H50").Sort Key1:=Range([C4].Value & 7), Order1:=xlAscending
End Sub
Bác ơi, sau khi chọn giá trị trong ô C4, mình lại phải nhấn nút lệnh. Em muốn chỉ chọn giá trị trong C4 là việc sắp xếp thưc hiện ngay (Không dùng bất cứ nút lệnh nào). Mong bác giúp tiếpBạn làm vầy xem
PHP:Private Sub CommandButton1_Click() On Error Resume Next Range("A7:H50").Sort Key1:=Range([C4].Value & 7), Order1:=xlAscending End Sub
Thì bạn đưa nó vào sự kiện thôiBác ơi, sau khi chọn giá trị trong ô C4, mình lại phải nhấn nút lệnh. Em muốn chỉ chọn giá trị trong C4 là việc sắp xếp thưc hiện ngay (Không dùng bất cứ nút lệnh nào). Mong bác giúp tiếp
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$4" Then Exit Sub
On Error Resume Next
Range("A7:H50").Sort Key1:=Range([C4].Value & 7), Order1:=xlAscending
End Sub
Cái chính là em chưa hiểu cái "sự kiện" đấyThì bạn đưa nó vào sự kiện thôi
PHP:Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$4" Then Exit Sub On Error Resume Next Range("A7:H50").Sort Key1:=Range([C4].Value & 7), Order1:=xlAscending End Sub
Em đã biết dùng VBA để sắp xếp dữ liệu thông qua nút lệnh Command Button. (do em record macro).
Tuy nhiên em chưa biết cách để sắp xếp theo tiêu chí dựa trên giá trị của 1 ô.
Xin các tiền bối giúp
Sub [COLOR=#ff0000][B]Drpd1[/B][/COLOR]_Change()
Dim drp As DropDown
With Sheet1.Range("A7:K10000")
Set drp = .Parent.DropDowns("Drpd1")
.Sort .Cells(1, drp.Value), 1, Header:=xlNo
End With
End Sub
Thực sự em cũng đang loay hoay chuyển sang DropDown list như bác gợi ý.Lời khuyên: Để tránh lỗi không đáng có vì dùng sự kiện change, khuyên bạn nên thay Validation bằng ComboBox
Tôi làm như sau:
- Vẽ 1 ComboBox (Forms), đặt tên là Drpd1
- Nạp list cho combobox tuỳ ý
- Chèn 1 Module với code:
- Trở ra bảng tính, click phải vào ComboBox, chọn Assign Macro và chỉ đến tên Sub Drpd1_Change rồi OKMã:Sub [COLOR=#ff0000][B]Drpd1[/B][/COLOR]_Change() Dim drp As DropDown With Sheet1.Range("A7:K10000") Set drp = .Parent.DropDowns("Drpd1") .Sort .Cells(1, drp.Value), 1, Header:=xlNo End With End Sub
- Xong! Giờ thì chọn vào ComboBox để thí nghiệm
Thực sự em cũng đang loay hoay chuyển sang DropDown list như bác gợi ý.
Nhưng mong bác đừng cười, em vẽ lại ComboBox (forms) trên file mà không làm được như bác:
1. Nạp list cho ComboBox như thế nào. (trong Input Range không có)
2. Đặt tên cho ComboBox như thế nào? (Tên ComboBox đã mặc định)
Add list cho Dropdown bằng tay chắc bạn biết rồi chứ? Tức liên kết với 1 vùng nào đó ấy
Tôi giả sử cái Dropdown ấy đã có list (do add bằng tay) rồi. Giờ ta làm tiếp vài công đoạn sau:
- Dùng chuột chọn vào Dropdown
- Bấm Alt + F11 vào cửa sổ lập trình.
- Bấm tiếp Ctrl + G để mở cửa sổ Immediate
- Gõ vào dòng lệnh: Selection.List = Selection.List và Enter
- Trở về bảng tính và xóa vùng liên kết với Dropdown
----------------------------------------
Còn vụ đặt tên thì cứ chọn vào Dropdown rồi gõ tên tùy ý vào hộp Name Box thôi
Xem video clip
Lời khuyên: Để tránh lỗi không đáng có vì dùng sự kiện change, khuyên bạn nên thay Validation bằng ComboBox
Tôi làm như sau:
- Vẽ 1 ComboBox (Forms), đặt tên là Drpd1
- Nạp list cho combobox tuỳ ý
- Chèn 1 Module với code:
- Xong! Giờ thì chọn vào ComboBox để thí nghiệmMã:Sub Drpd1_Change() Dim drp As DropDown With Sheet1.Range("A7:K10000") Set drp = .Parent.DropDowns("Drpd1") .Sort .Cells(1, drp.Value), 1, Header:=xlNo End With End Sub
Sub Drpd1_Change()
Dim drp As DropDown
[COLOR=#0000cd][B]UnProtect sheet[/B] [/COLOR]
With Sheet1.Range("A7:K10000")
Set drp = .Parent.DropDowns("Drpd1")
.Sort .Cells(1, drp.Value), 1, Header:=xlNo
End With
[COLOR=#0000cd][B]Protect sheet[/B][/COLOR]
End Sub
Các bác cho em hỏi, em thử tí toáy 1 tí bằng cách thêm lệnh
Sao nó báo lỗi nhỉ. Các chỗ khác em vẫn làm mà không thấy bị lỗiMã:Sub Drpd1_Change() Dim drp As DropDown [COLOR=#0000cd][B]UnProtect sheet[/B] [/COLOR] With Sheet1.Range("A7:K10000") Set drp = .Parent.DropDowns("Drpd1") .Sort .Cells(1, drp.Value), 1, Header:=xlNo End With [COLOR=#0000cd][B]Protect sheet[/B][/COLOR] End Sub
![]()
Hehe, các tiền bối thông cảm, em đang mò mẫm về VBA và bắt đầu từ ABV
Vâng em cũng thường làm như thế. Nó rất hay và cho câu lệnh chính xác.Ví dụ bạn không biết câu lệnh nó là gì nhưng bằng tay thì bạn biết làm. Vậy thì đơn giản là:
- Bật record macro lên
- Thao tác bằng tay để Protect sheet (hoặc Unprotect sheet)
- Tắt record macro và xem code
ĐÓ LÀ CÁCH HỌC
Vâng em cũng thường làm như thế. Nó rất hay và cho câu lệnh chính xác.
Tuy nhiên câu lệnh thu được từ Record Macro thường rườm rà và nhiều lúc không thể ghi được. Ngoài ra cũng vì vừa record macro, vừa dùng code của diễn đàn nên khi đưa vào vận dụng kết quả là "1 nồi thập cẩm" chẳng biết gọi là lẩu hay cháo nữa.
Hehee
Vâng em cũng thường làm như thế. Nó rất hay và cho câu lệnh chính xác.
Tuy nhiên câu lệnh thu được từ Record Macro thường rườm rà và nhiều lúc không thể ghi được. Ngoài ra cũng vì vừa record macro, vừa dùng code của diễn đàn nên khi đưa vào vận dụng kết quả là "1 nồi thập cẩm" chẳng biết gọi là lẩu hay cháo nữa.
Hehee
Sub Macro1()
'
' Macro2 Macro
'
'
Range("A1:B10").Select
Selection.Copy
Range("C1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Sub Macro1()
Range("A1:B10").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues
End Sub
Lời khuyên: Để tránh lỗi không đáng có vì dùng sự kiện change, khuyên bạn nên thay Validation bằng ComboBox
- Vẽ 1 ComboBox (Forms), đặt tên là Drpd1
- Nạp list cho combobox tuỳ ý
- Chèn 1 Module với code:
Mã:Sub [COLOR=#ff0000][B]Drpd1[/B][/COLOR]_Change() Dim drp As DropDown With Sheet1.Range("A7:K10000") Set drp = .Parent.DropDowns("Drpd1") .Sort .Cells(1, drp.Value), 1, Header:=xlNo End With End Sub
Bác cho em hỏi vì sao bác khuyên là sử dụng ComboBox (Forms) chứ không phải là ComboBox trong ControloToolBox. Khác nhau của 2 thằng này là gì ạ ??
Khác nhau hoàn toàn chứ!
Tùy theo cách mà bạn ứng dụng thôi.
Có ai dạy bảo gì đâu, nói như Thầy NDU đấy, cứ vọc riết, bị treo máy riết, bị mất dữ liệu riết rồi thành ra kinh nghiệm thôi.Đấy, những thông tin dù là rất nhỏ nhưng gà mờ như em là cả vấn đề. Biết đọc sách nào để biết ?. Không thông từ đầu sẽ không có lựa chọn đúng đối tượng khi vận dụng. Lâu dần sẽ thành "tật" khó mà trở thành chuyên nghiệp như các bác được
Một khi xài code của diễn đàn, bạn nên dịch hay nhờ người khác dịch từ ngôn ngữ VBA sang ngôn ngữ tiếng Việt cái đã cho chắc ăn;Tuy nhiên câu lệnh thu được từ Record Macro thường rườm rà và nhiều lúc không thể ghi được.
Ngoài ra cũng vì vừa record macro, vừa dùng code của diễn đàn nên khi đưa vào vận dụng kết quả là "1 nồi thập cẩm" chẳng biết gọi là lẩu hay cháo nữa.
Hehee
Có ai dạy bảo gì đâu, nói như Thầy NDU đấy, cứ vọc riết, bị treo máy riết, bị mất dữ liệu riết rồi thành ra kinh nghiệm thôi.
Bạn cần phải vọc thật nhiều mới có được kinh nghiệm xương máu!
Em cũng thường xuyên vọc ấy chứ. Buổi tối cứ ôm máy tính đến rạng sáng. Trên màn hình có 4 cửa sổ: 1. Cửa sổ Excel, 2. Cửa sổ VBE, 3. Cửa sổ web GPE và cửa sổ Google.
Tuy nhiên cứ như con dã tràng, tuy chẳng tiếc công, nhưng nhiều lúc tắc ở vấn đề rất nhỏ làm mình "điên" lắm
Tôi bị hoài cái vụ "tắc" này, mới viết hôm trước, hôm sau nhìn lại tôi phải nghiệm thật lâu mới nhớ mình viết với mục đích gì, tại sao mình viết như vậy! (chỉ tại cái tật chủ quan, chả chịu ghi chú trên code gì cả, dạo này đang tập ghi chú rồi nè, nhưng cũng hay quên hoài à).
Bác cho em hỏi vì sao bác khuyên là sử dụng ComboBox (Forms) chứ không phải là ComboBox trong ControloToolBox. Khác nhau của 2 thằng này là gì ạ ??