VBA:如果单元格包含特定文本,如何隐藏行

VBA:如果单元格包含特定文本,如何隐藏行

我正在使用 Excel 2013。我是 VBA 新手。我发现一个代码,如果我的单元格 N39 等于“已通过”,它会隐藏 2 行(36 和 37)

我找到了代码,但收到消息“检测到模糊名称“Worksheet_Change”

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("N39").Value = "Passed" Then
        Rows("36:37").EntireRow.Hidden = True
    ElseIf Range("N39").Value = "Failed" Then
        Rows("36:37").EntireRow.Hidden = False

    End If
End Sub

所以我尝试了我的工作表的名称,但它没有任何反应

Private Sub NRF(ByVal Target As Range)
    If Range("N39").Value = "Passed" Then
        Rows("36:37").EntireRow.Hidden = True
    ElseIf Range("N39").Value = "Failed" Then
        Rows("36:37").EntireRow.Hidden = False
    End If
End Sub

可能是因为我上面有另一个代码吗?

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim celltxt As String
    celltxt = ActiveSheet.Range("E39").Text
    If InStr(1, celltxt, "P670-Staffing") Then
    MsgBox "Add the job title and type of hire in the description cell - column H" & vbNewLine & vbNewLine & "If this is a new position, please obtain your HRBP's approval"
    End If
End Sub

知道我做错了什么吗?

答案1

知道我做错了什么吗?

我找到了代码,但收到消息“检测到模糊名称“Worksheet_Change”

不能有两个具有相同名称和参数的函数Worksheet_Change

我删除了之前的代码,它仍然可以工作。如何让它与其他代码一起工作?

您需要将所有代码放入单个Worksheet_Change函数中。

答案2

此代码适用于我的机器(Windows 7 x64,Excel 2016):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("N39").Value = "Passed" Then
        Rows("36:37").EntireRow.Hidden = True
    ElseIf Range("N39").Value = "Failed" Then
        Rows("36:37").EntireRow.Hidden = False
    End If
End Sub

我认为“Rows”拼写错误为“ows”可能与此有关。而且我还必须删除多余的换行符才能使其正常工作。

相关内容