首页 > 解决方案 > 基于时间和范围值的消息框

问题描述

提前感谢您对此的任何帮助。

对整个 excel VBA 来说还是相当新的。理想情况下,我希望一些代码能够执行以下功能。

这是我的例子;

我有大约 20 行数据,列 (A) 包含引用,列 (B) 包含申请日期,列 (C) 包含计算经过时间段的公式,列 (D) 状态为“真”或“假” " 如果指定的时间段已经过去。

我希望发生在一天中的特定时间,比如上午 11:00,我希望出现一个显示文本“Chase Documents”的消息框。这仅在满足以下条件时才会出现,列 D:D = "TRUE" 中的文本。如果“假”则忽略。

我只希望在给定的指定时间出现此消息,而不是每次将数据输入工作表时出现。

是否也可以从同一行引用另一个单元格?并让它显示在文本框中?例如,文本框会显示文本“Chase Documents”以及列 (A) 中的值。

我知道这可能是不可能的,但我们将不胜感激。

这是我对代码的了解;

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Range("D:D").Find(what:="TRUE", LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True) Is Nothing Then
        MsgBox "CHASE Documents!!"
    End If
   End Sub


Private Sub Workbook_Open()


    Application.OnTime TimeValue("11:00:00"), "Change"

    End Sub

我不断遇到上述代码的错误消息。

我理想中想要的是在一天中的某个时间点进行提醒,说明需要根据指定列中的值来追踪文档。

再次对此提供任何帮助将不胜感激!

谢谢,

标签: excelvba

解决方案


您已经非常接近您的代码:

ThisWorkbook添加这个:

Option Explicit

Private Sub Workbook_Open()

    Application.OnTime TimeValue("11:00:00"), "ChaseDocs"

End Sub

在 anymodule中,添加这个(并更改工作表名称):

Option Explicit

Sub ChaseDocs()

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Your Sheet Name Here")

Dim rngSrc As Range
Set rngSrc = ws.Range("D:D").Find(what:="TRUE", LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True)

    If Not rngSrc Is Nothing Then
        MsgBox "CHASE Documents!!" & vbCrLf & vbCrLf & rngSrc.Offset(, -3).Value
        'vbCrLf ==> means new line
        'rngSrc.Offset(, -3).Value ==> means get the value 3 columns to the left from current position
    End If
End Sub

推荐阅读