【问题标题】:Looping though Worksheets - Hiding non-contiguous columns循环工作表 - 隐藏不连续的列
【发布时间】:2019-06-13 15:18:55
【问题描述】:

在工作簿中,我想遍历所有工作表,并根据每个工作表的某个单元格中的关键字,我想在各个工作表中隐藏一些不连续的列。 隐藏单个列或多个连续的列没有问题,但是当我将多个不连续的列设置为我的范围时它不起作用。

Sub HideColumns()
    Dim i As Integer
    Dim x As Integer

    i = Worksheets.Count

    For x = 1 To i 
        Worksheets(x).Range("A:AX").EntireColumn.Hidden = False
        If InStr(1, Worksheets(x).Range("A1").Value, "keyword", 1) <> 0 Then
            Worksheets(x).Range("D:E, G:H").EntireColumn.Hidden = True
        Else: Worksheets(x).Range("A:AX").EntireColumn.Hidden = False
        End If
    Next x 
End Sub

谁能告诉我为什么这不起作用?

当然,一种解决方法是分别添加所有列,但我更愿意以更短的方式进行,当然,我想了解更多关于 VBA 的信息。顺便说一句,我是 VBA 的初学者。

【问题讨论】:

  • 您能解释一下“不起作用”是什么意思吗?例如错误代码?
  • 我得到的错误是“运行时错误'1004':应用程序定义的或对象定义的错误”。由于当将单个列或多个连续列作为要隐藏的列的范围给出时,子执行它应该做的事情,我假设存在一些我不知道的语法错误,这意味着在我的场景中由于某种原因,不可能给出多个非连续列的范围。
  • 嗯。 Range("D:E, G:H").EntireColumn.Hidden = True 在空白工作簿中工作得很好。单子是什么样的?您可以手动隐藏这些列吗?
  • 我在没有循环的情况下再次尝试了它,但它也没有工作(虽然它之前做过),所以我只是重新启动了 excel,现在我在上面发布的代码工作......重新启动 excel 似乎有做到了,现在我觉得问这个问题很愚蠢。无论如何,谢谢你的帮助。
  • 嗯不用觉得自己很蠢。毕竟,您不确定语法。重要的是问题解决了。

标签: excel vba


【解决方案1】:

如果您事先使所有相关列可见,则不需要您的Else 语句。

Option Explicit

Sub HideColumns()
    Dim i As Integer
    Dim x As Integer

    i = Worksheets.Count

    For x = 1 To i

        Worksheets(x).Range("A:AX").EntireColumn.Hidden = False

        If InStr(1, Worksheets(x).Range("A1").Value, "keyword", 1) <> 0 Then
            Worksheets(x).Range("D:E, G:H").EntireColumn.Hidden = True
        End If

    Next x

End Sub

除了那个小问题,我们的代码按预期工作。

【讨论】:

  • 干得好。丹尼斯,注意这篇文章的缩进和风格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
相关资源
最近更新 更多