我現在接到一個需求,是這樣的,先舉個例子:
一個Excel檔案中有4個Sheet頁,分別為Sheet1/Sheet2/Sheet3/Sheet4;
其中Sheet1為選項頁面可以讓用戶選擇月份(可多選);Sheet2/Sheet3/Sheet4(列名一樣)頁面分別對應三個區域的銷售資料,
現在的需求是根據Sheet1選中的月份顯示出各區域Sheet2/Sheet3/Sheet4中月份的銷售資料,未選中的月份隱藏;
我現在的想法是在sheet1中插入串列框(可多選),增加一個按鈕用來呼叫宏;
但是之前沒有用過VBA,想請各位大神幫忙想想具體怎么實作?
另附上Sheet1的截圖:

Sheet2/Sheet3/Sheet4截圖:
uj5u.com熱心網友回復:
把你要隱藏的東西放到單獨的列或者單獨的sheet上。隱藏sheet或者隱藏列。這期間錄制宏,然后就能看到具體的代碼應該咋寫了uj5u.com熱心網友回復:
從你的截圖來看, 是插入的“表單控制元件”。這個好像沒法“獲取資料”、判斷是否選擇了某項。
需要用 ActiveX 控制元件,才可以在VBA中獲取狀態資訊。
uj5u.com熱心網友回復:
感謝回復,如果有變通的做法,麻煩說明下具體怎么實作?如果是利用ActiveX控制元件uj5u.com熱心網友回復:
參考如下代碼。注意你的 ListBox的控制元件名! 若不同自己修改。
Option Explicit
Private 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 Sub
Private Sub CommandButton2_Click()
' 添加串列資料。可以寫在別的程序中,“打開檔案”時執行一次。
Dim i As Long
Call ListBox1.Clear
ListBox1.MultiSelect = 1
For i = 1 To 12
ListBox1.AddItem i & "月份"
Next
End Sub
uj5u.com熱心網友回復:
哦,對了,你的“月份”是B列到M列,要把上面代碼9到11行中 1&+i 改為 2&+i 。uj5u.com熱心網友回復:
可在4樓代碼第6行加入代碼:If (0 = ListBox1.ListCount) Then Exit Sub
這樣可避免“空串列”引起運行例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/45245.html
標籤:VBA
