1

我正在尝试根据我的下拉选项显示一个隐藏的列。对于单行它工作正常但是当我想将我的范围扩展到 10 行时

If Range("$CF$5: $CF$15") = "Others" Then

Tt 显示一个Runtime error 13.

下面是我的代码。谢谢你的协助。

If Range("$CF$5") = "Others" Then
    ActiveSheet.Columns("CG").EntireColumn.Hidden = False
Else
    ActiveSheet.Columns("CG").EntireColumn.Hidden = True
End If 
4

2 回答 2

2

你不能像你正在做的那样比较范围内的值。

If Range("$CF$5: $CF$15") = "Others"

有很多方法可以进行比较。循环遍历范围是最常见的方式。下面是另一种检查垂直范围内的所有单元格是否具有相同值的方法。

这是你正在尝试的吗?

Sub Sample()
    Dim ws As Worksheet
    Dim rng As Range

    '~~> Set your worksheet here
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        '~~> Set your range here
        Set rng = .Range("CF5:CF15")

        '~~> Check if any cell in the range have "Others"
        If Application.WorksheetFunction.CountIf(rng, "Others") = _
        rng.Rows.Count Then
            .Columns("CG").EntireColumn.Hidden = False
        Else
            .Columns("CG").EntireColumn.Hidden = True
        End If
    End With
End Sub

编辑:

如果你想显示/隐藏列,即使有一个“其他”的实例,那么你也不需要循环。看这个

Sub Sample()
    Dim ws As Worksheet
    Dim rng As Range

    '~~> Set your worksheet here
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        '~~> Set your range here
        Set rng = .Range("CF5:CF15")

        '~~> Check if all the cells in the range have "Others"
        If Application.WorksheetFunction.CountIf(rng, "Others") > 0 Then
            .Columns("CG").EntireColumn.Hidden = False
        Else
            .Columns("CG").EntireColumn.Hidden = True
        End If
    End With
End Sub
于 2013-10-18T08:31:56.940 回答
0

这个怎么样?这假设如果范围内的单个单元格设置为“其他”,则将显示 CG 列,如果没有,则隐藏 CG。不确定这是否是你真正想要的?

Dim cell As Range

For Each cell In Range("$CF$5:$CF$15")

    If cell = "Others" Then
        ActiveSheet.Columns("CG").EntireColumn.Hidden = False
        Exit For
    Else
        ActiveSheet.Columns("CG").EntireColumn.Hidden = True
    End If

Next cell
于 2013-10-18T09:45:04.220 回答