Tạo VBA cảnh báo sự thay đổi dữ liệu (1 người xem)

Liên hệ QC

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

tamhoncuada10313

Thành viên thường trực
Tham gia
7/4/08
Bài viết
221
Được thích
65
Trong một sheet có cỡ 1000 dòng dữ liệu,có thể trong lúc nhập dữ liệu mới vào ta vô tình thay đổi dữ liệu đã nhập vào trước đó mà không hay biết.Giờ tôi muốn tạo một cảnh báo dạng như : "Dữ liệu ở ô A9 đã bị thay đổi" và hỏi xem có muốn lưu thay đổi đó không?Nhưng em chỉ biết là viết code ở sự kiện workbook sheet selectionchange thôi,còn cụ thể như thế nào thì em chịu -\\/. Nghĩ mãi không biết diễn giải "nếu Dữ liệu ở ô A9 thay đổi" thì dịch ra code VBA như thế nào?
Mong các bác giúp giùm!

Tôi làm thử như vầy, coi có được không?
 
Lần chỉnh sửa cuối:
Em tải file em đang làm dở lên đây.Em muốn tạo cảnh báo cho những cell đã có dữ liệu rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn copy code này vào sheet
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next

If Target.Value <> "" Then
If MsgBox("Ban co muon luu thay doi nay khong?", vbQuestion + vbYesNo) = vbNo Then
Application.Undo
End If
End If

End Sub
 
Upvote 0
Như cách của Ng_Duy_Long thì khi xóa dữ liệu sẽ không có phản ứng gì.
Bạn thử cách này xem
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If MsgBox("Du lieu o " & Target.Address & "da thay doi" & Chr(13) & _
    "Co  muon luu lai thay doi khong ?", vbQuestion + vbYesNo) = vbNo Then
        With Application
            .EnableEvents = False
            .Undo
            .EnableEvents = True
        End With
    End If
End Sub
 
Upvote 0
Mình thấy rất hay. Nhưng mình thấy khi nhập cho một ô chưa có dữ liệu nó cũng hỏi, có cách nào để nó chỉ hỏi khi ta thay đổi dữ liệu của ô đã có dữ liệu từ trước không?
 
Upvote 0
Như thế này cho đầy đủ

Mình thấy rất hay. Nhưng mình thấy khi nhập cho một ô chưa có dữ liệu nó cũng hỏi, có cách nào để nó chỉ hỏi khi ta thay đổi dữ liệu của ô đã có dữ liệu từ trước không?

loay xoay mãi cũng đạt được
Như thế này cho đầy đủ, đã xử lý, ô nào k có DL sẽ k hỏi




PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tam1, tam2
    On Error GoTo thoat
    tam1 = Target.Value
    Application.EnableEvents = False
    Application.Undo
    tam2 = Target.Value
    Target.Value = tam1
    If tam2 <> "" Then _
       If MsgBox("Du lieu o " & Target.Address & "da thay doi" & Chr(13) & _
               "Co  muon luu lai thay doi khong ?", vbQuestion + vbYesNo) = vbNo _
               Then Target.Value = tam2
thoat:
      Target.Offset(1, 0).Select
      Application.EnableEvents = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
các bác cho em hỏi lệnh Chr(13) là lệnh gì ?Với lại sao em gõ code của bác tiger vào thì chả thấy j,vẫn sửa được dl mà không thấy hỏi có lưu hay ko?
 
Lần chỉnh sửa cuối:
Upvote 0
các bác cho em hỏi lệnh Chr(13) là lệnh gì ?

Giống như trong Word bạn ấn Enter (xuống dòng) vậy!

PHP:
="da thay doi" & "Co  muon luu lai thay doi khong?"
=da thay doi Co muon luu lai thay doi khong?
'=========================================
="da thay doi" & Chr(13) & "Co  muon luu lai thay doi khong?"
= da thay doi
   Co muon luu lai thay doi khong?

Chr(13) trả về ký tự mũi tên của nút {Enter}
 
Lần chỉnh sửa cuối:
Upvote 0
các bác cho em hỏi lệnh Chr(13) là lệnh gì ?Với lại sao em gõ code của bác tiger vào thì chả thấy j,vẫn sửa được dl mà không thấy hỏi có lưu hay ko?


bạn gõ vào đâu nhỉ???

phải gõ vào code của sheet cần nhập

chẳng hạn tại sheet1

+ bạn nháy phải (R.Click) vào tab của sheet1 (dưới đáy màn hình đó) và chọn View CODE

+ copy đoạn CODE vào trên --> đóng VBE lại

thế là được, giờ thử gõ ở sheet1

Upload File gửi kèm lun cho bạn nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
bác tiger ơi!có if mà không thấy end if hả bác?Bác xem lại cú fáp if ... then ...else xem. Với lại không hiểu sao nếu em thay đổi dữ liệu quá 3 lần là không thấy cảnh báo nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
bác tiger ơi!có if mà không thấy end if hả bác?Bác xem lại cú fáp if ... then ...else xem. Với lại không hiểu sao nếu em thay đổi dữ liệu quá 3 lần là không thấy cảnh báo nữa.


oh, đây chỉ có IF ... then... thui

Khi sau then có 1 lệnh ta viết trên 1 dòng k cần end if nữa bạn ah,

vd:
If b<>0 Then t=a/b

hay

If b<>0 Then _
t=a/b


nhưng phải
If b<>0 Then
t=a/b
End if

vì dấu " _ "là dấu nối câu lệnh rùi coi như cùng 1 dòng
Chi tiết hơn bạn xem ở đây: http://www.giaiphapexcel.com/forum/showthread.php?t=996


vụ nhập 3 lần tôi sẽ xem lại
 
Lần chỉnh sửa cuối:
Upvote 0
Oh, tôi kiểm tra thấy có sao đây, cả ở Verion 2003 và 2007 lun

bạn xem lại nhé

@các TV # kiểm tra hộ, có j phát hiện báo lại xin cảm ơn
 
Upvote 0
Khi bôi đen 2 ô trở lên rối ấn nút del thì không có phản ứng gì. Bác tigertiger xem lại nhé
 
Upvote 0
loay xoay mãi cũng đạt được
Như thế này cho đầy đủ, đã xử lý, ô nào k có DL sẽ k hỏi
Anh tigertiger ơi,
File này cần bẫy lỗi nhiều nữa anh à.
Ví dụ : Đoạn code trên sẽ không có tác dụng trong 1 số trường hợp sau : Fill down, Chọn nhiều Cell 1 lần nhập liệu (Ctrl+Enter) ...

TDN
 
Upvote 0
bác tiger ơi!có if mà không thấy end if hả bác?Bác xem lại cú fáp if ... then ...else xem. Với lại không hiểu sao nếu em thay đổi dữ liệu quá 3 lần là không thấy cảnh báo nữa.
Bạn xem lại đi mình chạy đoạn code bác tiger gửi mới nhất 5 lần vẫn OK mà. Cảm ơn bác Tiger nhé rất hay đấy.
 
Upvote 0
xin chào! các bạn cho mình hỏi? khi có cảnh báo hỏi đó mình muốn ô dữ liệu đó được bôi màu thì như nào aj?
 
Upvote 0
Web KT

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

Back
Top Bottom