Nhờ giúp đỡ về sự kiện change trong VBA

Liên hệ QC

tieugia35

Thành viên mới
Tham gia
8/1/16
Bài viết
19
Được thích
0
E tàu ngầm diễn đàn mình đã lâu, cũng học lóm được nhiều thứ. Hiện tại e đang viết đoạn code sử dụng sự kiện change để lọc dữ liệu trong VBA nhưng cái ô được tagret e có gán 1 Hàm dò tìm vlookup ở sheet khác. Kết quả là khi chạy code thì excel ko chạy lệnh, e phải nhấp vào ô target rồi enter thì VBA mới chạy. Mọi người có cách gì hay bày e với
 
Worksheet_change chỉ hoạt động khi data thay đổi bằng nhập liệu tay.
Còn thay đổi từ công thức thì dùng worksheet_calculate thử nhé.
 
Upvote 0
Worksheet_change chỉ hoạt động khi data thay đổi bằng nhập liệu tay.
Còn thay đổi từ công thức thì dùng worksheet_calculate thử nhé.
Đây là đoạn code của e à, e chuyển sang calculate mà nó cư báo lỗi dòng target.address. A sửa giúp e đoạn này ạ
Private Sub Worksheet_Calculate()
Dim arr(), kq(), tong, tongsl As Double
lr = Sheet4.Range("A" & Rows.Count).End(xlUp).Row
lrhide = Range("A72").End(xlUp).Row + 1
If Target.Address = "$L$65" Then
arr = Sheet4.Range("A5:D" & lr).Value
ReDim kq(1 To UBound(arr, 1), 1 To UBound(arr, 2))
For i = 1 To UBound(arr, 1)
If arr(i, 4) = Target.Value Then
a = a + 1
kq(a, 1) = a
kq(a, 2) = arr(i, 2)
kq(a, 3) = arr(i, 3)
kq(a, 4) = arr(i, 4)
End If
Next i

Range("A65:J72").ClearContents
If a = 0 Then
MsgBox "Khong co du lieu"
Exit Sub
Range("A65").Activate
End If
kq(a + 1, 4) = Range("H1").Value
Range("A65").Resize(a + 1, 3) = kq
End If
End Sub
 
Upvote 0
Xóa nó đi nhìn vào sự kiện kia làm gì có Target.
A có thể sửa đoạn code này dùm e ko, do cái sự kiện calculate này e chưa sử dụng lần nào. Search trên mạng cũng rất ít dữ liệu về cái này, hoặc dùng changle nhưng chèn thêm đoạn code để nó thực hiện lệnh luôn ấy
 
Upvote 0
Bạn thử thay dòng "Private Sub Worksheet_Calculate()" thành
Private Sub Worksheet_Change(ByVal Target As Range)
xem sao
 
Upvote 0
Bạn thử thay dòng "Private Sub Worksheet_Calculate()" thành
Private Sub Worksheet_Change(ByVal Target As Range)
xem sao
Ban đầu là nó là sự kiện change mà, ý mình là cái ô target ấy. Mình gài 1 hàm dò tìm vào ô ấy nhưng sự kiện change chỉ hoạt động khi mình nhấp vào ô và enter. Đây là cái mình muốn nhờ làm sao mà mình dùng hàm và ở ô target tự nhảy kết quả thực hiện lệnh luôn
 
Upvote 0
Ban đầu là nó là sự kiện change mà, ý mình là cái ô target ấy. Mình gài 1 hàm dò tìm vào ô ấy nhưng sự kiện change chỉ hoạt động khi mình nhấp vào ô và enter. Đây là cái mình muốn nhờ làm sao mà mình dùng hàm và ở ô target tự nhảy kết quả thực hiện lệnh luôn
Đính kèm tập tin, mô tả kỹ, chưa chắc đã đủ để người ta giúp, nói chi tới vài giọt nước bọt suông. Hãy thử đặt mình vào vị trí của người khác đi. Rõ ràng là khi ô có công thức thay đổi thì không có sự kiện Change. Vậy phải tìm cách khác. Nhưng ai có thể giúp cách khác trên cơ sở vài câu vu vơ? Phải có tập tin, và mô tả kỹ, là khi giá trị NÀY thay đổi thì tôi muốn LỌC thế này thế này. Lúc đó người ta nhìn vào dữ liệu, thấy các mối liên hệ ràng buộc thì rất có thể người ta sẽ đề nghị phản ứng khi giá trị KIA thay đổi chứ không phải giá trị NÀY thay đổi. Và có thể không phải là LỌC mà SÀNG. Còn nếu chỉ một vài câu chung chung thì ngồi đấy mà đợi nhé.

Tập tin và mô tả đầy đủ còn chả nhằm nhò gì thì đừng mơ là vài câu chung chung, vu vơ sẽ đủ.
 
Upvote 0
Giả sử ở trang Sheet4 bạn đang có danh sách nhân viên (NV) cơ quan với 4 cột dữ liệu như sau:

STTMã NVHọ & TênMã DV
1BXT01Bùi Thị Xuân ThànhB
2BXT00Bùi Xuân ThắmA
3CCH00Châu Chấn HuyC
4CNS00Chu Ngọc SơnF
5CVA00Cỗ Văn ẨnF
6CMN00Công Tằng Tôn Nữ Minh NguyệtE
7CNM00Công Tằng Tôn Nữ Nguyệt MinhE
8CJL00Cù LânD
9FFD00Đào Đức DươngA
10FLT00Đinh La ThăngC
11FFD01Đỗ Đăng DungB
12DAH00Dương Ánh HòaF
13LCM01Lã Chí MaiE
14LCM00Lê Công MinhD
15LCT00Lê Công ThànhE

Bạn cần tại thời điểm nào đó cần lọc ra những NV ở 1 trong 5 đơn vị của CQ bằng macro sự kiện, cách làm mình nghĩ sẽ phải vầy:
B1: Tại ô [L65] - nơi diễn ra sự kiện, bạn cần có 1 Validation gồm các mã đơn vị thuộc CQ của bạn.
B2: Thiết lập macro sự kiện lọc (như bạn nêu) ; Macro này sẽ lọc cho bạn các thành viên có mã ĐV mà bạn đã chọn

Rất vui được tiếp câu chuyện cùng bạn!
 
Upvote 0
Đính kèm tập tin, mô tả kỹ, chưa chắc đã đủ để người ta giúp, nói chi tới vài giọt nước bọt suông. Hãy thử đặt mình vào vị trí của người khác đi. Rõ ràng là khi ô có công thức thay đổi thì không có sự kiện Change. Vậy phải tìm cách khác. Nhưng ai có thể giúp cách khác trên cơ sở vài câu vu vơ? Phải có tập tin, và mô tả kỹ, là khi giá trị NÀY thay đổi thì tôi muốn LỌC thế này thế này. Lúc đó người ta nhìn vào dữ liệu, thấy các mối liên hệ ràng buộc thì rất có thể người ta sẽ đề nghị phản ứng khi giá trị KIA thay đổi chứ không phải giá trị NÀY thay đổi. Và có thể không phải là LỌC mà SÀNG. Còn nếu chỉ một vài câu chung chung thì ngồi đấy mà đợi nhé.

Tập tin và mô tả đầy đủ còn chả nhằm nhò gì thì đừng mơ là vài câu chung chung, vu vơ sẽ đủ.
Giả sử ở trang Sheet4 bạn đang có danh sách nhân viên (NV) cơ quan với 4 cột dữ liệu như sau:

STTMã NVHọ & TênMã DV
1BXT01Bùi Thị Xuân ThànhB
2BXT00Bùi Xuân ThắmA
3CCH00Châu Chấn HuyC
4CNS00Chu Ngọc SơnF
5CVA00Cỗ Văn ẨnF
6CMN00Công Tằng Tôn Nữ Minh NguyệtE
7CNM00Công Tằng Tôn Nữ Nguyệt MinhE
8CJL00Cù LânD
9FFD00Đào Đức DươngA
10FLT00Đinh La ThăngC
11FFD01Đỗ Đăng DungB
12DAH00Dương Ánh HòaF
13LCM01Lã Chí MaiE
14LCM00Lê Công MinhD
15LCT00Lê Công ThànhE

Bạn cần tại thời điểm nào đó cần lọc ra những NV ở 1 trong 5 đơn vị của CQ bằng macro sự kiện, cách làm mình nghĩ sẽ phải vầy:
B1: Tại ô [L65] - nơi diễn ra sự kiện, bạn cần có 1 Validation gồm các mã đơn vị thuộc CQ của bạn.
B2: Thiết lập macro sự kiện lọc (như bạn nêu) ; Macro này sẽ lọc cho bạn các thành viên có mã ĐV mà bạn đã chọn

Rất vui được tiếp câu chuyện cùng bạn!
Sr các a, e gửi file để các a tham khảo.
Phiền các a xem thử, ở ô L65 có cài VBA để tra dữ liệu ở sheet TC và nhận sự thay đổi dữ từ ô L12, còn ô L12 là key dò tìm từ sheet DULIEU. E chỉ muốn khi ô L12 đổi số thì ở ô L65 chạy theo sẽ thực hiện lệnh tự động mà ko phải nhấp chuột vào ô L65 và enter thì lệnh mới thực thi ạ.
 

File đính kèm

  • YCNT-NN1.xlsm
    72.2 KB · Đọc: 8
Upvote 0
Sr các a, e gửi file để các a tham khảo.
Phiền các a xem thử, ở ô L65 có cài VBA để tra dữ liệu ở sheet TC và nhận sự thay đổi dữ từ ô L12, còn ô L12 là key dò tìm từ sheet DULIEU. E chỉ muốn khi ô L12 đổi số thì ở ô L65 chạy theo sẽ thực hiện lệnh tự động mà ko phải nhấp chuột vào ô L65 và enter thì lệnh mới thực thi ạ.
Thử file đính kèm.
Vẫn file và code của bạn tôi chỉ sửa lại đôi chút.
Tôi cho rằng tại cái buttonspint đó bạn dùng Form controls để vẽ, Tôi dùng ActiveX Controls để vẽ thì code sự kiện ở ô L12 chạy.
 

File đính kèm

  • YCNT-NN1.xlsm
    71.6 KB · Đọc: 16
Upvote 0
Thử file đính kèm.
Vẫn file và code của bạn tôi chỉ sửa lại đôi chút.
Tôi cho rằng tại cái buttonspint đó bạn dùng Form controls để vẽ, Tôi dùng ActiveX Controls để vẽ thì code sự kiện ở ô L12 chạy.
Em có viết thêm 1 đoạn code để nó tự ẩn dòng khi show ko hết, nhưng ko hiểu sao nó ko ẩn dòng như ý muốn, lúc thì chạy được lúc thì ko. Nhờ anh xem giúp ạ
 

File đính kèm

  • YCNT-NN9.xlsm
    79.1 KB · Đọc: 2
Upvote 0
Em có viết thêm 1 đoạn code để nó tự ẩn dòng khi show ko hết, nhưng ko hiểu sao nó ko ẩn dòng như ý muốn, lúc thì chạy được lúc thì ko. Nhờ anh xem giúp ạ
nếu đúng bạn muốn ẩn những dòng không có dữ liệu của vùng A65:J71 thì thử xem file.
Đoạn code ẩn dòng được viết ngày trong Sub ABC. nên khi có sự kiện ở L12 đã kích hoạt Sub ABC hoạt động, sau khi gán dữ liệu xuống Sh xong sẽ kiểm tra xem còn dòng nào thừa và ẩn luôn.
Khuyên bạn: đã dùng VBA thì nên hạn chế dùng hàm
 

File đính kèm

  • YCNT-NN9.xlsm
    74 KB · Đọc: 8
Upvote 0
nếu đúng bạn muốn ẩn những dòng không có dữ liệu của vùng A65:J71 thì thử xem file.
Đoạn code ẩn dòng được viết ngày trong Sub ABC. nên khi có sự kiện ở L12 đã kích hoạt Sub ABC hoạt động, sau khi gán dữ liệu xuống Sh xong sẽ kiểm tra xem còn dòng nào thừa và ẩn luôn.
Khuyên bạn: đã dùng VBA thì nên hạn chế dùng hàm
Do viết hàm trong VBA hơi phức tạp và gõ chữ tiếng Việt trong VBA khó khăn nên em thường viết hàm cho những cái đơn giản. Chỉ cái nào phức tạp em mới dùng VBA, việc viết hàm và dùng VBA cùng nhau sẽ gây ra xung đột hay sao anh ?
 
Upvote 0
Do viết hàm trong VBA hơi phức tạp và gõ chữ tiếng Việt trong VBA khó khăn nên em thường viết hàm cho những cái đơn giản. Chỉ cái nào phức tạp em mới dùng VBA, việc viết hàm và dùng VBA cùng nhau sẽ gây ra xung đột hay sao anh ?
Bạn đã thử file chưa? kết quả thế nào?có đúng ý không?
Tất nhiên là 1 vài công thức ở một số trăm ô thì cũng không có vấn đề gì. Nhưng nếu mà một bảng tính cả ngàn dòng, vài 3 chục cột tính ra khoảng hàng trăm ngàn, hàng triệu ô có công thức thì khi load file, hoặc mỗi khi bảng tính có sự thay đổi, Máy sẽ lại phải tính lại toàn bộ cả triệu ô ấy? Khi ấy Phần khay dưới của màn hình sẽ hiện lên % của khối lượng tính toán. (nhất là đối với những file công thức được tham chiếu đến nhiều vùng, nhiều trang tính, thì thời gian để cho nó load hết sẽ chiếm 1 thời gian và dung lượng đáng kể). Tôi không có kiến thức chuyên sâu về vấn đề này, chỉ tạm hiểu thế thôi.
 
Upvote 0
Web KT

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

Back
Top Bottom