Gán macro vào sự kiện Combo Box Change (2 người xem)

Liên hệ QC

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

khunglongcodon

Thành viên thường trực
Tham gia
24/11/06
Bài viết
222
Được thích
100
Nghề nghiệp
Kế toán
Em làm một Combo Box hiển thị vùng dữ liệu gồm 3 cột từ một tên khối có sẵn. Sau đó em ghi macro trích lọc rồi copy đoạn mã đó vào sự kiện Combo Box change. Nhưng nó bị dính cái lỗi là khi em thay đổi bên vùng dữ liệu là combo box tự chạy theo. Không biết các anh chị nào giúp em khắc phục không.
 

File đính kèm

Bạn chỉ cần chuyển thuộc tính row source của combox là Vung (không phải Vung1 nhé)
 
Upvote 0
Khi em chuyển Vung1 sang Vung ở ListFillRange, thì em nhấp đôi vào cột 1 Macro cũng tự chạy ạ.
 
Upvote 0
Mình không hiểu bạn muốn gì cả. Nếu chỉ cần cố định dữ liệu trong combobox thì làm như trên là ok rồi
 
Upvote 0
khi anh thay đổi dữ liệu trên cột 1 thì ComboBox chạy Macro và dẫn đến tràn bộ nhớ. anh thử thay đổi giá trị ở cột 1 xem thử.
Capture.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
t có thấy gì đâu. bạn xem file xem ntn (bạn cố gắng up file bằng excell 2003, máy t chậm lắm chạy 2007 không ổn)
 

File đính kèm

Upvote 0
Em làm một Combo Box hiển thị vùng dữ liệu gồm 3 cột từ một tên khối có sẵn. Sau đó em ghi macro trích lọc rồi copy đoạn mã đó vào sự kiện Combo Box change. Nhưng nó bị dính cái lỗi là khi em thay đổi bên vùng dữ liệu là combo box tự chạy theo. Không biết các anh chị nào giúp em khắc phục không.
Thay sự kiện ComboBox1_Change thành ComboBox1_DropButtonClick xem
Có điều code trong file này chẳng hiểu dùng để làm gì
PHP:
Private Sub ComboBox1_Change()
 Range("A4").Select
    Range("A3:C9").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "F18"), Unique:=False
End Sub
Bạn nói xem code trên làm cái gì? Copy vùng A3:C9 đến F18 à? Thế thì cần quái gì Advanced Filter
 
Upvote 0
-Trong file, 2 name vung, vung1 thực chất là một vì chúng liên kết nhau. Khi dữ liệu trên các vùng này thay đổi, sự kiện Combobox_Change, Combobox_Click sẽ bị kích hoạt làm chạy macro. Dùng name động hoặc tham chiếu trực tiếp range vẫn bị như thế. Dùng sự kiện DropButtonClick thì OK nhưng cũng chịu macro chạy 2 lần. Có lẽ phải dùng Combobox trong Form Control kết hợp với sự kiện Worksheet_change thì mới khắc phục được lỗi trên.
 
Upvote 0
Thay sự kiện ComboBox1_Change thành ComboBox1_DropButtonClick xem
Có điều code trong file này chẳng hiểu dùng để làm gì
PHP:
Private Sub ComboBox1_Change()
 Range("A4").Select
    Range("A3:C9").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "F18"), Unique:=False
End Sub
Bạn nói xem code trên làm cái gì? Copy vùng A3:C9 đến F18 à? Thế thì cần quái gì Advanced Filter
Dạ, file này em làm mẫu thôi, chủ yếu để khắc phục cái lỗi thay đổi vùng chọn thì combo Box tự kích hoạt macro thôi anh ạ.
 
Upvote 0
-Trong file, 2 name vung, vung1 thực chất là một vì chúng liên kết nhau. Khi dữ liệu trên các vùng này thay đổi, sự kiện Combobox_Change, Combobox_Click sẽ bị kích hoạt làm chạy macro. Dùng name động hoặc tham chiếu trực tiếp range vẫn bị như thế. Dùng sự kiện DropButtonClick thì OK nhưng cũng chịu macro chạy 2 lần. Có lẽ phải dùng Combobox trong Form Control kết hợp với sự kiện Worksheet_change thì mới khắc phục được lỗi trên.
Anh có thể demo thử cho em được không ạ? Em xin cảm ơn anh trước
 
Upvote 0
Dạ, file này em làm mẫu thôi, chủ yếu để khắc phục cái lỗi thay đổi vùng chọn thì combo Box tự kích hoạt macro thôi anh ạ.
Bạn sửa thế này có thể được:
1> Vào phần Properties của ComboBox1, xóa thuộc tính ListFillRange = Vung1 đi
2> Ta sẽ nạp list cho ComboBox1 bằng 1 Macro khác:
PHP:
Sub Auto_Open()
  Sheet1.ComboBox1.List() = Sheet1.Range("Vung1").Value
End Sub
Code này sẽ chạy khi mở file và nạp list vào ComboBox
3> Sửa sự kiện Change của ComboBox thành sự kiện Click
PHP:
Private Sub ComboBox1_Click()
  Range("A3:C9").AdvancedFilter 2, , Range("F18")
End Sub
Xem file thử còn lỗi không nha
 

File đính kèm

Upvote 0
Cảm ơn anh nhiều nhiều nhiều ạ. Em làm được rồi.@$@!^%
 
Upvote 0
Nguyên văn bởi ndu96081631
Xem file thử còn lỗi không nha
File chạy tốt, không có lỗi gì. Chỉ còn một vấn đề nhỏ không ảnh hưởng gì lắm: Khi thay đổi dữ liệu nguồn, combobox không cập nhật được ngay, phải làm động tác đóng mở file. Sửa thêm một chút cho hoàn chỉnh.
Mã:
Private Sub ComboBox1_DropButtonClick()
Sheet1.ComboBox1.List() = Sheet1.Range("Vung1").Value
End Sub
Nạp list bằng sự kiện DropButtonClick
 
Upvote 0
Bạn sửa thế này có thể được:
1> Vào phần Properties của ComboBox1, xóa thuộc tính ListFillRange = Vung1 đi
2> Ta sẽ nạp list cho ComboBox1 bằng 1 Macro khác:
PHP:
Sub Auto_Open()
  Sheet1.ComboBox1.List() = Sheet1.Range("Vung1").Value
End Sub
Code này sẽ chạy khi mở file và nạp list vào ComboBox
3> Sửa sự kiện Change của ComboBox thành sự kiện Click
PHP:
Private Sub ComboBox1_Click()
  Range("A3:C9").AdvancedFilter 2, , Range("F18")
End Sub
Xem file thử còn lỗi không nha

Các anh trên diễn đàn giúp em trường hợp này với em muốn làm 1 cái combobox1 trong userform1 khi click vào nội dung bên trong combobox cụ thể là click vào 1 công tác thì chạy công tác mình chọn mà bên trong có nhiều loại công việc khác nhau. em muốn dùng kiểu lặp for - to, và if - then - else - end if để chọn nội dung từng sub trong modul 1. em xin chân thành cảm ơn.
 

File đính kèm

Upvote 0
Các anh trên diễn đàn giúp em trường hợp này với em muốn làm 1 cái combobox1 trong userform1 khi click vào nội dung bên trong combobox cụ thể là click vào 1 công tác thì chạy công tác mình chọn mà bên trong có nhiều loại công việc khác nhau. em muốn dùng kiểu lặp for - to, và if - then - else - end if để chọn nội dung từng sub trong modul 1. em xin chân thành cảm ơn.
Xem thử file đính kèm nhé.
 

File đính kèm

Upvote 0
Các anh trên diễn đàn giúp em trường hợp này với em muốn làm 1 cái combobox1 trong userform1 khi click vào nội dung bên trong combobox cụ thể là click vào 1 công tác thì chạy công tác mình chọn mà bên trong có nhiều loại công việc khác nhau. em muốn dùng kiểu lặp for - to, và if - then - else - end if để chọn nội dung từng sub trong modul 1. em xin chân thành cảm ơn.
Có cần gì đến For.. Next hay IF gì chứ
Chỉ vầy thôi:
PHP:
Private Sub ComboBox1_Click()
  On Error Resume Next
  Run Me.ComboBox1.Text
End Sub
 
Upvote 0
Xem thử file đính kèm nhé.

em xem rồi, ý em là không chạy cái textbox mà khi click vào nội dung nào thì chạy luôn nội dung của sub nằm trong modul1. vd: nều click nội dung 1 thì chạy private sub nội dung 1 và click nội dung 2 thì chạy private sub nội dung 2, 3, 4, 5,...cho em hỏi với cái (strCV) là dùng làm gì vậy anh, em đang từng bước học nên cũng bập bẹ, các anh chỉ giúp và đừng cười em nha
 
Upvote 0
em xem rồi, ý em là không chạy cái textbox mà khi click vào nội dung nào thì chạy luôn nội dung của sub nằm trong modul1. vd: nều click nội dung 1 thì chạy private sub nội dung 1 và click nội dung 2 thì chạy private sub nội dung 2, 3, 4, 5,...cho em hỏi với cái (strCV) là dùng làm gì vậy anh, em đang từng bước học nên cũng bập bẹ, các anh chỉ giúp và đừng cười em nha
Đó là biến, không cần nó cũng được.

Mã:
Private Sub ComboBox1_Change()    
Application.Run ComboBox1.text


End Sub
Lưu ý sub bạn gõ trong module là Msg là không phải, nó phải là MsgBox nha bạn
 
Upvote 0
em làm được rồi, em cảm ơn các anh trên diễn đàn nhiều. em còn 1 thắc mắc nữa muốn hỏi, vì khi ta click chọn thì nó chạy xong nhưng trong combobox nó lại hiển thị nội dung của vùng chọn tại cột A, mà không phải là tên công việc tại cột B, xin chỉ giúp em
 
Upvote 0
Đó là biến, không cần nó cũng được.

Mã:
Private Sub ComboBox1_Change()    
Application.Run ComboBox1.text
End Sub
Lưu ý sub bạn gõ trong module là Msg là không phải, nó phải là MsgBox nha bạn

Nếu em sử dụng 1 file khác để lưu những nội dung cần chọn như trong sheet1 ví dụ là file dữ liệu thì trong userform trong file CallMac em phải khai báo nó thế nào? Private sub userform_initalize()........end sub
 
Upvote 0
Web KT

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

Back
Top Bottom