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”列的自动更改方式
答案 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对象的资格,以便清楚地知道要访问哪个工作表,但这不是问题的一部分