Excel 根据从其他图纸中选择的值取消隐藏图纸中的列

Excel 根据从其他图纸中选择的值取消隐藏图纸中的列,excel,vba,Excel,Vba,我有一张名为“说明”的表格,人们可以从中选择他们参加的活动数量,从1到25。这是在H18单元 我希望能够根据所选内容隐藏sheet InputSheet中的列。例如,如果他们选择3个活动,我需要能够隐藏F:AA列。如果他们选择10个活动,我需要隐藏M:AA列。我需要隐藏的列是D:AA 我浏览了很多论坛,但只找到了隐藏行或是,没有选项的方法。不是这样的。感谢您的帮助 快速循环 Sub Hide Worksheets("InputSheet").Columns("D:AA").Hidden

我有一张名为“说明”的表格,人们可以从中选择他们参加的活动数量,从1到25。这是在H18单元

我希望能够根据所选内容隐藏sheet InputSheet中的列。例如,如果他们选择3个活动,我需要能够隐藏F:AA列。如果他们选择10个活动,我需要隐藏M:AA列。我需要隐藏的列是D:AA

我浏览了很多论坛,但只找到了隐藏行或是,没有选项的方法。不是这样的。感谢您的帮助

快速循环

Sub Hide
    Worksheets("InputSheet").Columns("D:AA").Hidden = False
    Dim i as long
    For i = Worksheets("Instructions").Range("H18") + 4 to 27
         Worksheets("InputSheet").Columns(i).Hidden = True
    Next i
End Sub
或无循环:

Sub Hide
    Worksheets("InputSheet").Columns("D:AA").Hidden = False
    With Worksheets("InputSheet")
        .Range(.Cells(1,Worksheets("Instructions").Range("H18").Value + 4),.Cells(1,27)).EntireColumn.Hidden = True
    End With
 End Sub

您可以尝试将此作为第一步:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Value As Long
    Dim ColumnsToHide As String

    If Not Intersect(Target, ThisWorkbook.Worksheets("Instructions").Range("H18")) And Target.Count = 1 Then

        Value = Target.Value

        Select Case Value

            Case Is = 3
                ColumnsToHide = "F:AA"
            Case Is = 10
                ColumnsToHide = "M:AA"

        End Select

        Application.EnableEvents = False

            With ThisWorkbook.Worksheets("InputSheet")
                .Cells.EntireColumn.Hidden = False
                .Columns(ColumnsToHide).EntireColumn.Hidden = True
            End With

        Application.EnableEvents = True

    End If

End Sub

将其放在工作表说明的代码模块中

每次在1和10之间更改单元格H18时,它都会在另一张表中隐藏所需的范围:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NumberOfActivities As Long
    If Not Intersect(Target, Me.Range("H18")) Is Nothing Then
        Application.EnableEvents = False
        NumberOfActivities = CLng(Me.Range("H18").Value)
        If NumberOfActivities >= 1 And NumberOfActivities <= 10 Then
            With Sheets("InputSheet")
                .Columns("D:AA").Hidden = False
                .Range( _
                    .Range("D1").Offset(0, NumberOfActivities - 1), _
                    .Range("AA1")).EntireColumn.Hidden = True
            End With
        End If
        Application.EnableEvents = True
    End If
End Sub

请试一试,看看你能做些什么-即使你不能让它工作,我们也可以帮助你调整代码以实现你的目标谢谢!我试过了,效果很好!我最终使用了上面的循环,但是感谢你的建议谢谢你的建议,这是一个很好的建议,它确实有效。最终使用了上面的循环,但感谢您的帮助!