我现在接到一个需求,是这样的,先举个例子:
一个Excel文件中有4个Sheet页,分别为Sheet1/Sheet2/Sheet3/Sheet4;
其中Sheet1为选项页面可以让用户选择月份(可多选);Sheet2/Sheet3/Sheet4(列名一样)页面分别对应三个区域的销售数据,
现在的需求是根据Sheet1选中的月份显示出各区域Sheet2/Sheet3/Sheet4中月份的销售数据,未选中的月份隐藏;
我现在的想法是在sheet1中插入列表框(可多选),增加一个按钮用来调用宏;
但是之前没有用过VBA,想请各位大神帮忙想想具体怎么实现?
另附上Sheet1的截图:
Sheet2/Sheet3/Sheet4截图:

解决方案 »

  1.   

    把你要隐藏的东西放到单独的列或者单独的sheet上。隐藏sheet或者隐藏列。这期间录制宏,然后就能看到具体的代码应该咋写了
      

  2.   

    从你的截图来看, 是插入的“窗体控件”。
    这个好像没法“获取数据”、判断是否选择了某项。需要用 ActiveX 控件,才可以在VBA中获取状态信息。
      

  3.   

    感谢回复,如果有变通的做法,麻烦说明下具体怎么实现?如果是利用ActiveX控件
      

  4.   

    参考如下代码。
    注意你的 ListBox的控件名! 若不同自己修改。
    Option ExplicitPrivate Sub CommandButton1_Click()
    ' 按选定的月份进行 显示/隐藏 相应列
       Dim i As Long, vs As Boolean   For i = 0& To 11
          vs = Not ListBox1.Selected(i)
          Sheet2.Columns(1& + i).EntireColumn.Hidden = vs
          Sheet3.Columns(1& + i).EntireColumn.Hidden = vs
          Sheet4.Columns(1& + i).EntireColumn.Hidden = vs
       Next
    End SubPrivate Sub CommandButton2_Click()
    ' 添加列表数据。可以写在别的过程中,“打开文档”时执行一次。
       Dim i As Long   Call ListBox1.Clear
       ListBox1.MultiSelect = 1
       For i = 1 To 12
          ListBox1.AddItem i & "月份"
       Next
    End Sub
      

  5.   

    哦,对了,你的“月份”是B列到M列,要把上面代码9到11行中 1&+i 改为 2&+i 。
      

  6.   

    可在4楼代码第6行加入代码:
    If (0 = ListBox1.ListCount) Then Exit Sub这样可避免“空列表”引起运行异常。