繁体   English   中英

VBA代码可根据一系列单元格中的单元格值显示消息

[英]VBA code to display message based on cell value in a range of cells

我是VBA的新手。 我正在尝试创建一个宏,该宏将根据不同工作表上一系列单元格的单元格值显示一条消息。我已经有一个宏,本质上是ctlr + F,目标是当输入ID号时新的宏将显示所需的消息。

这就是我所拥有的,并且您可以告诉我我很新,甚至可能与我所需要的不相近:

Sub Worksheet_Calculate()
    If Worksheets("worksheet").range("B2:B200") > 0 Then
        MsgBox "message needed"
    Else
        MsgBox "other message needed"
        Exit Sub
    End If
End Sub

理论上,如果从第一个宏的单元格范围中搜索到的单元格中有0,则它将显示一条消息,否则将显示替代消息。

Worksheet_Calculate处理程序(应该为Private )将在每次在该工作表上进行任何计算执行。

目的是当输入该ID号时,此新宏将...

为此使用Worksheet_Change处理程序。 您将获得一个ByVal Target As Range参数,该参数告诉您已修改了哪个单元格。 您可以使用Application.Intersect来确定Target是否与特定范围的单元格相交,并采取相应的行动-此站点上有很多示例。

现在,此代码:

 If Worksheets("BLD Id List To Be Searched").Range("B2:B200") > 0 Then 

隐式获取一个多单元格Range对象的Value (它是一个2D变量数组),然后将其与0进行比较。 这是保证的类型不匹配运行时错误,因为您不能像这样将整个数组与单个值进行比较。

在这里接受@BigBen的建议:

If Application.WorksheetFunction.CountIf([ActiveWorkbook.]Worksheets("name").Range("B2:B200"), ">0") > 0 Then

请注意,如果您打算使用ThisWorkbook (即包含VBA代码的Excel文档),并且工作表“要搜索的BLD ID列表”在ThisWorkbook编译时存在,则该代码将更加健壮/使用用户可修改的“标签名称”来证明您是否使用工作表的代码名,而不是从当时正处于活动状态的任何工作簿的Worksheets集合中取消引用它。

将工作表模块的(Name)属性更改为BLDListSheet ,然后可以执行以下操作:

If Application.WorksheetFunction.CountIf(BLDListSheet.Range("B2:B200"), ">0") > 0 Then

无需担心使代码与工作表的“选项卡名称”保持同步。

现在,如果宏在每次修改单元格时都运行,那么显示一条消息并忽略修改了哪个特定单元格就没有多大意义了,是吗?

Private Sub Worksheet_Change(ByVal Target As Range)
    If Application.Intersect(BLDListSheet.Range("B2:B200"), Target) Is Nothing Then Exit Sub
    If IsNumeric(Target.Value) Then
        If Target.Value > 0 Then
            ' modified cell has a new value greater than 0
        Else
            ' modified cell has a new value less than or equal to 0
        End If
    Else
        ' Target.Value may not be safe to compare with anything here.
        If IsError(Target.Value) Then Debug.Print Target.Address & " contains an error!"
    End If
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM