根据先前对这个问题的回答,我编写了这段不起作用的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("'Paramètres clés du projet'!$H$25").Value = "1" Then
Columns("'Feuille de calcul'!L:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "2" Then
Columns("'Feuille de calcul'!M:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "3" Then
Columns("'Feuille de calcul'!N:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "4" Then
Columns("'Feuille de calcul'!O:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "5" Then
Columns("'Feuille de calcul'!P:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "6" Then
Columns("'Feuille de calcul'!Q:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "7" Then
Columns("'Feuille de calcul'!R:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "8" Then
Columns("'Feuille de calcul'!S:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "9" Then
Columns("'Feuille de calcul'!T:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "10" Then
Columns("'Feuille de calcul'!U:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "11" Then
Columns("'Feuille de calcul'!V:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "12" Then
Columns("'Feuille de calcul'!W:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "13" Then
Columns("'Feuille de calcul'!X:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "14" Then
Columns("'Feuille de calcul'!Y:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "15" Then
Columns("'Feuille de calcul'!Z:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "16" Then
Columns("'Feuille de calcul'!AA:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "17" Then
Columns("'Feuille de calcul'!AB:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "18" Then
Columns("'Feuille de calcul'!AC:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "19" Then
Columns("'Feuille de calcul'!AD:AD").EntireColumn.Hidden = True
ElseIf Range("'Paramètres clés du projet'!$H$25").Value = "20" Then
Columns("'Feuille de calcul'!AD:AD").EntireColumn.Hidden = False
End If
End Sub
--> 我想要从此代码中获得的功能是根据另一张表中某个单元格的值(从 0 到 20 的下拉菜单)自动隐藏另一张表中的某个区域。
有人可以解释一下为什么我的代码不起作用吗?
谢谢
答案1
像那样将目标表放入其中Columns()
是无效的。
请尝试使用
Worksheets("Feuille de calcul").Columns("L:AD").EntireColumn.Hidden = True
。
您也可以尝试一些更短、更动态的方法。您可以执行以下操作,而不是定义列表中的每个值:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cMin As Integer, cMax As Integer, cSave As Integer, i As Integer, ws As String
ws = "Feuille de calcul" 'Sheet to hide on.
cMin = 12 'First column to hide on "1". 12 = "L"
cMax = 30 'Last column to hide. 30 = "AD"
If Target.Address = "$H$25" Then 'Only updates the Hidden columns in `ws´ when the list is changed
If Target.Value >= 1 And Target.Value <= 20 Then 'Only updates if list is between 1 and 20
cSave = cMin
Do 'Loops through and unhides all columns between cMin and cMax
Worksheets(ws).Columns(cMin).EntireColumn.Hidden = False
cMin = cMin + 1
Loop While cMin <= cMax
cMin = cSave
i = Target.Value
cMin = cMin + i - 1
If cMin > cMax Then 'If "20" is chosen from the default list, we have gone past cMax
cMin = cMax 'So we set it to the last column
End If
Do 'Loops through and hides all columns between cMin and cMax
Worksheets(ws).Columns(cMin).EntireColumn.Hidden = True
cMin = cMin + 1
Loop While cMin <= cMax
End If
End If
End Sub
如您所见,我没有包含对列表所在工作表的引用。
这是因为此代码应该放在特定工作表的代码中。
现在您可以更改起始和结束列,而不必重写整个内容。
编辑为首先取消隐藏在列范围 (cMin 到 cMax) 中指定的所有列。