giúp về macro chạy tự động khi dữ liệu thay đổi (không phải dùng command button) (1 người xem)

Liên hệ QC

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

laohac4i

Thành viên mới
Tham gia
17/10/07
Bài viết
23
Được thích
5
Gởi ACE:

Mình có 1 file (đính kèm), có 1 macro "SaoTot" bên trong (nhờ bạn qtm1987 viết giúp, vì mình không rành về VBA), nhưng hiện tại vẫn phải dùng command button khi muốn macro này chạy.

Nay mình muốn nhờ ACE rành về macro & VBA viết dùm code để macro "SaoTot" có thể chạy tự động, ngay khi giá trị ở 1 trong các ô L80, L81, L82 thay đổi, không cần phải bấm vào command button nữa.
Lưu ý giá trị này lệ thuộc vào 1 liên kết với cell ở shet khác (C1, B2, B3 ở sheet AL), chứ không phải do mình nhập thủ công.

Nhân tiện cho hỏi là có thể chuyển macro kia thành function được không, với đối số là tháng & ngày can, chi)?

Mong sớm nhận được sự trợ giúp của ACE.

Cảm ơn mọi người rất nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
Gởi ACE:

Mình có 1 file (đính kèm), có 1 macro "SaoTot" bên trong (nhờ bạn qtm1987 viết giúp, vì mình không rành về VBA), nhưng hiện tại vẫn phải dùng command button khi muốn macro này chạy.

Nay mình muốn nhờ ACE rành về macro & VBA viết dùm code để macro "SaoTot" có thể chạy tự động, ngay khi giá trị ở 1 trong các ô L80, L81, L82 thay đổi, không cần phải bấm vào command button nữa.
Lưu ý giá trị này lệ thuộc vào 1 liên kết với cell ở shet khác (C1, B2, B3 ở sheet AL), chứ không phải do mình nhập thủ công.

Cảm ơn mọi người rất nhiều.
Bạn chỉ cần thay đỗi:
PHP:
Sub SaoTot()
thành:
PHP:
Private Sub Worksheet_Calculate()
là OK
 
Upvote 0
Oh, mình làm như bạn tvxdgt hướng dẫn & thành công rồi, đa tạ tvxdgt.

Nhưng giờ lại phát sinh lỗi khi dữ liệu tra cứu (sheet AL) rỗng, hoặc khác dữ liệu trong bảng, các bạn giúp mình chèn thêm dòng bẫy lỗi này nha, nghĩa là dữ liệu ở sheet tra cứu sai, thì kết quả để trống là được.

Cảm ơn các bạn rất nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Oh, mình làm như bạn tvxdgt hướng dẫn & thành công rồi, đa tạ tvxdgt.

Nhưng giờ lại phát sinh lỗi khi dữ liệu tra cứu (sheet AL) rỗng, hoặc khác dữ liệu trong bảng, các bạn giúp mình chèn thêm dòng bẫy lỗi này nha, nghĩa là dữ liệu ở sheet tra cứu sai, thì kết quả để trống là được.

Cảm ơn các bạn rất nhiều.
Bạn có thể sửa lại code như sau, mình có thêm bẫy lỗi cho bạn rồi đó:
PHP:
Private Sub Worksheet_Calculate()
Dim i As Long, sArray, Arr()   
On Error GoTo SaoTot_Error
With Sheets("SaoTot")    
sArray = .Range(.[A4], .[A78].End(xlUp)).Resize(, 14).Value    ReDim Arr(1 To UBound(sArray, 1), 1 To 3)    
th = .Range("L80").Value    
can = .Range("K81").Value    
chi = .Range("K82").Value    
.Range("M80:N95").ClearContents
For i = 1 To UBound(sArray, 1)    
If UCase(sArray(i, th)) = UCase(can) Or UCase(sArray(i, th)) = UCase(chi) Or UCase(sArray(i, th)) = UCase(can) & " " & UCase(chi) Then        
n = n + 1        
Arr(n, 1) = sArray(i, 13)        
Arr(n, 2) = sArray(i, 14)    
End If
Next
.Range("M80").Resize(n, 2).Value = Arr
End With
   On Error GoTo 0   Exit Sub
SaoTot_Error:
    MsgBox "Error " & "Du lieu tra cuu rong hoac khac du lieu trong bang"
End Sub
 
Upvote 0
Bạn có thể sửa lại code như sau, mình có thêm bẫy lỗi cho bạn rồi đó:
PHP:
Private Sub Worksheet_Calculate()
Dim i As Long, sArray, Arr()   
On Error GoTo SaoTot_Error
With Sheets("SaoTot")    
sArray = .Range(.[A4], .[A78].End(xlUp)).Resize(, 14).Value    ReDim Arr(1 To UBound(sArray, 1), 1 To 3)    
th = .Range("L80").Value    
can = .Range("K81").Value    
chi = .Range("K82").Value    
.Range("M80:N95").ClearContents
For i = 1 To UBound(sArray, 1)    
If UCase(sArray(i, th)) = UCase(can) Or UCase(sArray(i, th)) = UCase(chi) Or UCase(sArray(i, th)) = UCase(can) & " " & UCase(chi) Then        
n = n + 1        
Arr(n, 1) = sArray(i, 13)        
Arr(n, 2) = sArray(i, 14)    
End If
Next
.Range("M80").Resize(n, 2).Value = Arr
End With
   On Error GoTo 0   Exit Sub
SaoTot_Error:
    MsgBox "Error " & "Du lieu tra cuu rong hoac khac du lieu trong bang"
End Sub

oh, vậy là tốt rồi, cảm ơn bạn rất nhiều nha.
 
Upvote 0
Bạn có thể sửa lại code như sau, mình có thêm bẫy lỗi cho bạn rồi đó:
Ai cha...
Lâu lâu để ý thấy đại ca này viết code "chắc tay" dữ hen ---> ý đang nói đến việc xử lý Array
(If n then .Range("M80").Resize(n, 2).Value = Arr sẽ đẹp hơn)
Chúc mừng!
Ẹc... Ẹc...
 
Upvote 0
mình muốn cái message box không hiện lên khi gặp lỗi, chỉ cần kết quả trả về là giá trị rỗng (cell trống) là được, nghĩa là vẫn bẫy lỗi, nhưng không cho hiện cái bảng thông báo kia, mấy bạn / anh chị giúp mình nha.

Thêm nữa (cái này được thì tốt, không được thì chịu), liệu có thể gom 2 sheet SaoTot & SaoXau lại thành 1, ý mình là gom code lại & viết trong 1 sheet luôn, vì dữ liệu gần như đã cố định, dùng chung tháng AL & ngày Can Chi.

Cảm ơn mọi người rất nhiều.
[h=2][/h]
 
Upvote 0
Web KT

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

Back
Top Bottom