如何在下面提到的VBA中使列动态化

时间:2018-10-30 11:56:20

标签: vba

If Worksheets("Data").Range("D5").value = 0 Then
Columns("K").EntireColumn.Hidden = True
Else
Columns("K").EntireColumn.Hidden = False
End If

先生,我有上面的代码,其中“ K”列是基于另一张纸的“ D5”单元格进行隐藏/取消隐藏的。但是,当我在Excel中添加或删除列时,我想要的列号就没有了。转换为“ L”或“ J”,但VBA中的列“ K”为静态,并通过此代码隐藏,这不会发生。在Excel中删除或添加列时,“ K”列的自动更改方式

2 个答案:

答案 0 :(得分:2)

如果在搜索“ Homeloan”一词之前先取消隐藏所有列没有问题,那么即使删除或添加列也应如此。

Sub test()

Dim lcol As Long
With Worksheets("Data")
    .Columns("A:AC").EntireColumn.Hidden = False 'Unhide all the columns first

    'This only works if the column with the word homeloan is not hidden.
    lcol = Application.WorksheetFunction.Match("Homeloan", .Range(.Cells(1, 1), .Cells(1, .Cells(1, .Columns.Count).End(xlToLeft).Column)), 0) 'Find last column in row 1. Then create a range to look for the word "Homeloan". Last, return the current column number where Header "Homeloan" exists.
        If .Range("D5").Value = 0 Then
            .Columns(lcol).EntireColumn.Hidden = True
        Else
            .Columns(lcol).EntireColumn.Hidden = False
        End If
End With
End Sub

答案 1 :(得分:2)

我建议您在要显示/隐藏的列的顶部单元格中添加一个名称(“命名范围”)。然后,您可以在代码中访问此命名的Range。

假设您在单元格"Homeloan"上定义了名称K1:写

Range("HomeLoan").EntireColumn.Hidden = False

请注意,您应始终限定Excel对象的资格,以便清楚地知道要访问哪个工作表,但这不是问题的一部分