【问题标题】:Use cell's value as part of macro使用单元格的值作为宏的一部分
【发布时间】:2018-10-23 07:51:50
【问题描述】:

我通常使用宏来显示和隐藏使用复选框的列。 我通过定义宏代码中的列来设置它。

Sub Hideshow()
    If Range("A1").Value = "True" Then
        ActiveSheet.Columns("B:C").Hidden = False
    ElseIf Range("A1").Value = "False" Then
        ActiveSheet.Columns("B:C").Hidden = True
    Else
    Return
    End If
    End Sub

对于此代码,A1 = 复选框的结果(真/假) 和 B:C 是我隐藏的列,或者,如果已经隐藏;显示。

但是,现在我正在制作一个更加动态的版本,因为当添加新列或列范围更改时,我已经厌倦了滚动宏代码和更改每个列引用。

我现在已将要隐藏的列放在工作表的单元格 A2 中 例如 B:C

我希望宏代码将该单元格的值用作“定义范围”吗?显示和隐藏我在单元格 A2 中定义的列范围。

我发现了很多类似的帖子,但它们略有不同,我无法使其适用于我的特定场景。

新的看起来像这样

Sub Hideshow()
    If Range("A1").Value = "True" Then
        ActiveSheet.Columns(" The Value in A2 ").Hidden = False
    ElseIf Range("A1").Value = "False" Then
        ActiveSheet.Columns(" The Value in A2").Hidden = True
    Else
    Return
    End If
    End Sub

有什么想法吗?

【问题讨论】:

    标签: excel variables range cell defined


    【解决方案1】:

    这段代码应该可以解决问题:

    Sub HideShow()
    
        Dim ColsToHide As String
        ColsToHide = Sheet1.Range("A2") 'This will always get the value from the sheet with the codename Sheet1.
    
        'Unhide if hidden, hide if not hidden.
        ActiveSheet.Columns(ColsToHide).Hidden = Not ActiveSheet.Columns(ColsToHide).Hidden
    
    End Sub  
    

    可能有更好的方法来确定哪些列需要隐藏 - 是否有任何特定的列决定是否应该隐藏它?

    【讨论】:

    • 谢谢达伦。这不仅简化了我原来的宏——而且回答了这个问题。我还没有尝试过,但很确定它会起作用。 Dim 标题是否需要是特定名称还是自定义标题?我计划将宏设置为“活动工作表”而不是指定工作表。
    • 不,您几乎可以使用任何您想要的词作为变量。避免使用 VBA 已经使用的词,例如 WorkbookValueName 等。(当你说 Dim title 我认为你的意思是 ColsToHide 位)。
    猜你喜欢
    • 2020-06-21
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多