2017-07-14 115 views
1

我试图在Excel 2016中创建一个宏,它自动根据包含在不同单元格中的字符串隐藏列。现在,范围R1:GJU1是一个用IF公式填充X的公式。Excel宏基于字符串隐藏列

这是我的代码:

Sub Hide_Columns_Containing_Value() 

    Dim c As Range 

    For Each c In Range("R1:GJU1").Cells 
     If c.Value = "X" Then 
      c.EntireColumn.Hidden = False 
     End If 
    Next c 

End Sub 

我得到这个错误:

Run-time error '13': 

Type mismatch 

任何帮助表示赞赏!

+0

[This](https://stackoverflow.com/questions/8885506/excel-vba-run-time-error-13-type-mismatch)可能对你有所帮助 – wahwahwah

+0

尝试'Columns(c.column ).EntireColumn.Hidden = False。 ...假设错误在那条线上。 – BruceWayne

+0

我尝试使用你的代码,并得到相同的错误。 – vash1422

回答

0

我从我的手机上输入这个,所以我不能测试,但这样做:

Columns(c.column).EntireColumn.Hidden = True 

会工作。基本上,你试图做的只是说Cell.Hide这是行不通的。 EntireColumn.Hidden将在引用列时起作用。所以,你应该说,隐藏这个cells' columncolumn

我也注意到你将它设置为False这意味着,取消隐藏。我猜这是错误的,除非你实际上试图取消隐藏它。

完整的代码应该是:

Sub Hide_Columns_Containing_Value() 

Dim c As Range 

For Each c In Range("R1:GJU1").Cells 
    If c.Value = "X" Then 
     Columns(c.column).EntireColumn.Hidden = True 
    End If 
Next c 

End Sub 

让我知道,如果它的工作原理!

+0

感谢您的称重。因此,我的工作表最初为用户隐藏了“列”。我有一个下拉(使用数据验证范围),它将R1:GJU1更改为带有IF语句的'X'(主要是因为我无法让宏与我的下拉菜单一起工作)。 当我使用你的代码时,它确实有效!现在,如果我希望用户能够在下拉列表中选择不同的选项以“重新隐藏”之前的列(每次下拉的旧标准)并仅显示新列? – vash1422

+0

啊,这更有意义!代码是否有帮助或根本没有? – Busse

+0

对不起,编辑我之前的评论。代码确实有帮助,现在试图进行优化以使其更具动态性,以便仅在特定单元格中显示值。 – vash1422