Vba 在Excel中基于组合框(表单)隐藏列

Vba 在Excel中基于组合框(表单)隐藏列,vba,excel,combobox,Vba,Excel,Combobox,我的一切都设置了不同的预测选项。我过去在另一份工作中做过这件事,我不知道自己哪里出了问题 Private Sub ComboBox1_Change() If ComboBox1.Value = "2 Weeks" Then Columns("J:L").Select Selection.EntireColumn.Hidden = False Columns("M:R").Select Selection.EntireColumn.Hidden

我的一切都设置了不同的预测选项。我过去在另一份工作中做过这件事,我不知道自己哪里出了问题

Private Sub ComboBox1_Change()

  If ComboBox1.Value = "2 Weeks" Then
      Columns("J:L").Select
      Selection.EntireColumn.Hidden = False
      Columns("M:R").Select
      Selection.EntireColumn.Hidden = True
  End If

  If ComboBox1.Value = "6 Weeks" Then
      Columns("M:O").Select
      Selection.EntireColumn.Hidden = False
      Columns("J:L").Select
      Selection.EntireColumn.Hidden = True
      Columns("P:R").Select
      Selection.EntireColumn.Hidden = True
  End If

  If ComboBox1.Value = "12 Weeks" Then
      Columns("P:R").Select
      Selection.EntireColumn.Hidden = False
      Columns("J:O").Select
      Selection.EntireColumn.Hidden = True
  End If

End Sub

看起来你的代码应该工作得很好。我重新编写了它,使其更加简洁,并且它工作得非常完美(使用Active-X控件)


看起来你的代码应该工作得很好。我重新编写了它,使其更加简洁,并且它工作得非常完美(使用Active-X控件)

在我包含的标题中,它是一个表单控件芬特鲁斯8分钟前

我之所以感到困惑,并在上面的评论中问您是使用表单控件还是ActiveX控件,是因为您的问题标题是“表单”,但代码是针对ActiveX的

对于表单控制,请将此代码粘贴到模块中

Option Explicit

Sub DropDown1_Change()
    Dim DDown As Shape

    Set DDown = ActiveSheet.Shapes(Application.Caller)

    Select Case DDown.ControlFormat.List(DDown.ControlFormat.ListIndex)
        Case "2 Weeks"
            Columns("J:L").Hidden = False
            Columns("M:R").Hidden = True
        Case "6 Weeks"
            Columns("J:L").Hidden = True
            Columns("M:O").Hidden = False
            Columns("P:R").Hidden = True
        Case "12 Weeks"
            Columns("J:O").Hidden = True
            Columns("P:R").Hidden = False
    End Select
End Sub
接下来右键单击表单组合框,并将上面的宏指定给它:)

在我包含的标题中,它是一个表单控件芬特鲁斯8分钟前

我之所以感到困惑,并在上面的评论中问您是使用表单控件还是ActiveX控件,是因为您的问题标题是“表单”,但代码是针对ActiveX的

对于表单控制,请将此代码粘贴到模块中

Option Explicit

Sub DropDown1_Change()
    Dim DDown As Shape

    Set DDown = ActiveSheet.Shapes(Application.Caller)

    Select Case DDown.ControlFormat.List(DDown.ControlFormat.ListIndex)
        Case "2 Weeks"
            Columns("J:L").Hidden = False
            Columns("M:R").Hidden = True
        Case "6 Weeks"
            Columns("J:L").Hidden = True
            Columns("M:O").Hidden = False
            Columns("P:R").Hidden = True
        Case "12 Weeks"
            Columns("J:O").Hidden = True
            Columns("P:R").Hidden = False
    End Select
End Sub


接下来,右键单击表单组合框并将上面的宏指定给它:)

以后,发布实际代码,而不是图片。很多人会自己将代码复制粘贴到excel中进行测试,在这里他们必须重新键入。你需要说明它做错了什么。我有点困惑。您使用的是表单控件还是ActiveX控件?对不起,我以为我在帮助别人,但仍然不习惯协议。它什么也没做。在我包含的标题中,它是一个表单控件。但代码看起来像是用于ActiveX控件的。:)为了将来,发布实际代码,而不是图片。很多人会自己将代码复制粘贴到excel中进行测试,在这里他们必须重新键入。你需要说明它做错了什么。我有点困惑。您使用的是表单控件还是ActiveX控件?对不起,我以为我在帮助别人,但仍然不习惯协议。它什么也没做。在我包含的标题中,它是一个表单控件。但代码看起来像是用于ActiveX控件的。:)看起来不错。由于某种原因,我的床单什么也做不了。我已将其保存到prper表中。可能是我把它当作ActiveX而不是表单来处理多亏了悉达思。@phentrus,这可能是真的。您确定已关闭设计模式吗?代码正常工作。因为代码隐藏了整个列,所以看起来好像什么都没发生。。。但是它隐藏了所需的列。@SiddharthRout,是的,我本来打算添加更多,但你给出了一个很好的答案,所以我将对此进行投票。噢,刚才看到了你的评论。我已经添加了一个答案。。。对不起,看起来不错。由于某种原因,我的床单什么也做不了。我已将其保存到prper表中。可能是我把它当作ActiveX而不是表单来处理多亏了悉达思。@phentrus,这可能是真的。您确定已关闭设计模式吗?代码正常工作。因为代码隐藏了整个列,所以看起来好像什么都没发生。。。但是它隐藏了所需的列。@SiddharthRout,是的,我本来打算添加更多,但你给出了一个很好的答案,所以我将对此进行投票。噢,刚才看到了你的评论。我已经添加了一个答案。。。对不起。你是说“隐藏”而不是“隐藏”吗?@LanceRoberts:哈哈,我确实这么做了,这一定是我的错。当我尝试分配宏时,列表现在是空的。@phentrus:你是否将代码粘贴到模块中(不在工作表代码区域中)你的意思是“隐藏”而不是“隐藏”?@LanceRoberts:LOL我当然这么做了这一定是我的责任。当我尝试分配宏时,列表现在是空的。@phentrus:您是否将代码粘贴到模块中(而不是工作表代码区域中)