Board logo

標題: [發問] Excel VBA 條件成立後,存檔時提醒 [打印本頁]

作者: jsc0518    時間: 2020-11-9 19:04     標題: Excel VBA 條件成立後,存檔時提醒

Dear 各位先進,
Excel VBA 是否可以依據"今天日期"且有"帳面錯誤",一旦成立後,存檔時會提醒呢?
再麻煩大家,感恩!!


[attach]32673[/attach]


[attach]32674[/attach]
作者: ikboy    時間: 2020-11-10 10:02

  1. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  2. Dim d As Date, a, b, r&, c&, t As Boolean
  3. r = [c1].CurrentRegion.Rows.Count - 1
  4. c = Columns("aj").Column
  5. a = Cells(2, 1).Resize(r, c).Value
  6. b = Cells(2, "aq").Resize(r).Value
  7. For i = 1 To UBound(a)
  8.     d = a(i, 3)
  9.     If a(i, c - 1) > a(i, c) Then b(i, 1) = "帳面錯誤": If d = Date Then t = True
  10. Next
  11. Cells(2, "aq").Resize(r) = b
  12. If t Then MsgBox "請注意" & Date & "帳面錯誤"
  13. End Sub
複製代碼

作者: jsc0518    時間: 2020-11-10 10:28

回復 2# ikboy

Dear ikboy,
您好!測試可以使用,非常感謝您的熱心幫忙。
  
再您請教
若在C欄位(日期欄位),他輸入的日期非今日日期,有可能輸入的日期為昨日或是大前天。
是否可讓VBA判讀,以C欄位最後欄位出現的日期(有可能輸入的日期為昨日或是大前天)去判讀,highlight "帳面異常"

如今日為 2020/11/10 ,在C欄位上最新輸入的日期為 2020/11/9 或是 2020/11/8
作者: ikboy    時間: 2020-11-10 11:11

不明白! 請列出問題,模擬要求結果。
作者: jsc0518    時間: 2020-11-10 11:59

回復 4# ikboy


Dear ikboy,

如下圖,再麻煩您了

[attach]32677[/attach]


[attach]32678[/attach]
作者: ikboy    時間: 2020-11-10 14:25

  1. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  2. Dim d As Date, a, b, r&, c&, t As Boolean
  3. r = [c1].CurrentRegion.Rows.Count - 1
  4. c = Columns("aj").Column
  5. a = Cells(2, 1).Resize(r, c).Value
  6. b = Cells(2, "aq").Resize(r).Value
  7. d = Application.Max(Cells(2, 3).Resize(r))
  8. For i = 1 To UBound(a)
  9.     If a(i, c - 1) > a(i, c) Then b(i, 1) = "帳面錯誤": If d = a(i, 3) Then t = True
  10. Next
  11. Cells(2, "aq").Resize(r) = b
  12. If t Then MsgBox "請注意" & d & "帳面錯誤"
  13. End Sub
複製代碼

作者: 准提部林    時間: 2020-11-10 14:33

回復 5# jsc0518


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim R, D, i&, K%
R = Cells(Rows.Count, "C").End(xlUp).Row
D = Cells(R, "c")
If Not IsDate(D) Then Exit Sub
For i = R To 2 Step -1
    If Cells(i, "c") <> D Then Exit For
    If Cells(i, "AQ") = "帳面錯誤" Then K = 1: Exit For
Next i
If K > 0 Then MsgBox "請注意!! " & D & " 帳面錯誤 "
End Sub
作者: jsc0518    時間: 2020-11-10 17:27

回復 7# 准提部林
Dear 准提部林,
感謝您的方法,TEST OK。
Thank you.
作者: jsc0518    時間: 2020-11-10 17:36

回復 6# ikboy

Dear ikboy,
感謝您熱心指導歐!
Thank you so much.
作者: jjloiasd    時間: 2020-11-12 09:28

回復 7# 准提部林

版主您好
不好意思,可否麻煩您說明語法的意思
感謝您
作者: 准提部林    時間: 2020-11-12 17:59

回復 10# jjloiasd


R = Cells(Rows.Count, "C").End(xlUp).Row '取得C列最後一格
D = Cells(R, "c") '取得最後一個日期
If Not IsDate(D) Then Exit Sub '檢測是否為日期
For i = R To 2 Step -1  '由下而上迴圈
    If Cells(i, "c") <> D Then Exit For '在日期有排序, 往上遇到不是最後日期, 跳出迴圈
    If Cells(i, "AQ") = "帳面錯誤" Then K = 1: Exit For '當AQ欄有錯誤提示文字時, K賦值1, 跳出迴圈
Next i
If K > 0 Then MsgBox "請注意!! " & D & " 帳面錯誤 "  '若K值大于0, 表示有錯誤, 發出提醒
作者: jjloiasd    時間: 2020-11-12 18:34

回復 11# 准提部林


感謝准大,學到了~~
作者: 劉大胃    時間: 2020-11-30 14:27

回復 7# ikboy
回復 7# 准提部林

Hello,  大大

請問變數宣告後的 "&" / "%" 各代表什麼意思?

Dim R, D, i&, K%

再請不吝告知.
Thanks ~
作者: n7822123    時間: 2020-12-1 00:54

回復 13# 劉大胃

那些是資料變數的簡短宣告字符~

詳細說明如下圖


[attach]32735[/attach]
作者: 劉大胃    時間: 2020-12-1 10:35

回復 14# n7822123

Hello, n7822123

了解!
謝謝您的回覆....




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)