Kích hoạt Worksheet Change khi giá trị cell thay đổi theo hàm Excel

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Chào cac bạn
Rất mong nhận được sự hỗ trợ của các bạn với vấn đề sau.
Như trong file đính kèm, tôi dùng code dưới đây để ghi lại thời gian trong cột D (Sheet 1) khi giá trị dòng tương ứng ở cột C hiển thị (bất kỳ giá trị nào), và khi xóa giá trị ở cột C thì thời gian hiển thị trên cột D dòng tương ứng cũng tự delete.
Giá trị thời gian này sẽ không thay đổi.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("C2:C1000"), Range(Target.Address)) Is Nothing Then
   If Range("C" & Target.Row).Value = "" Then
      Range("D" & Target.Row).ClearContents
   Else
      Range("D" & Target.Row).Value = Time
   End If
End If
End Sub

Vấn đề của tôi là giá trị (bất kỳ) ở cột C được thiết lập theo giá trị nhập vào ở một trang khác, trong file đính kèm là Sheet 2, cột A, dòng tương ứng.
Khi nhập giá trị vào cột A Sheet 2 thì giá trị ở cột C Sheet 1 dòng tương ứng sẽ hiển thị.
Tuy nhiên, khi giá trị ở cột C hiển thị thì thời gian không hiển thị trên cột D. Giá trị thời gian trên cột D chỉ có thể hiển thị (hoăc tự delete) khi cần phải nhấn Enter cho hàm Excel với giá trị trên cột C.

Rất mong nhận được sự hỗ trợ của các bạn để code VBA trện có thể kích hoạt ngay khi tôi nhập liệu vào cột A của Sheet 2.
Tôi cũng xin lỗi nếu như việc trình bày không được rõ ràng cho các bạn.

Còn cái này đối với mình thì nó là lâng cao. :wallbash: :wallbash: :wallbash:
Vẫn phải trong sheet2, mục đích là xóa nhiều dòng A thì bên Sheet 1 sẽ xóa nhiều dòng D. Code thì chạy nhưng mình chả hiểu tại sao nó chạy được. :wallbash::wallbash::wallbash:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("A:A"), Range(Target.Address)) Is Nothing Then
   If WorksheetFunction.CountA(Sheet2.Range(Target.Address)) = 0 Then
      Sheet1.Range(Target.Address).Offset(, 3).ClearContents
   Else
      Sheet1.Range(Target.Address).Offset(, 3).Value = Time
   End If
End If
End Sub

Mình tạm thời chưa có thời gian. Bạn nào thử giùm:
Thử application.undo bên trong calculate event, để lấy giá trị cũ trong cột C, và so sánh với giá trị sau calculate trong cột C. Nếu khác thì cập nhật cột D.
Đừng quên tắt application.enableEvents trước khi Undo rồi mở lại.
Đại khái thế này:
Tại sheet1:

Private Sub Worksheet_Calculate()
Dim oldRng, newRng
newRng = Range("C8:C1000").Value
With Application
.EnableEvents = False
.Undo
oldRng = Range("C8:C10").Value
.EnableEvents = True
End With

'Sau đó duyệt 2 mảng old và new để tìm ra ô nào thay đổi và điền thời gian vô

End Sub

www.giaiphapexcel.com/diendan/threads/k%C3%ADch-ho%E1%BA%A1t-worksheet-change-khi-gi%C3%A1-tr%E1%BB%8B-cell-thay-%C4%91%E1%BB%95i-theo-h%C3%A0m-excel.163270/post-1089163

Kỹ năng giải quyết vấn đề hiệu quả
Khóa học SprinGO phù hợp

Kỹ năng giải quyết vấn đề hiệu quả

Mô tả Nội dung Đánh giá Tài nguyên KỸ NĂNG GIẢI QUYẾT VẤN ĐỀ HIỆU QUẢHiểu đúng vấn đề là một nửa của giải...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm