在進入閱讀本文章的內容之前,思考一下如果想要製作選取方塊的效果,
要怎麼製作呢?
或許您已經製作過核取方塊,並用在很多地方。
但如果當您的Excel內需要重複設定大量的核取方塊,
想使用VBA,但不知道怎麼處理時,可以參考本篇文章。
或許可以給您一點想法也說不定。
如果你在您的程式中也遇到相同的問題,不妨以以下簡單的方式,
測試看看。
目錄
{tocify} $title={目錄}
前言
話說在前些日子,有朋友問我說,他想要透過VBA來製作核取方塊的效果。
我笑著說,如果只是幾個核取方塊勾選,不需要用到VBA,只需要簡單的EXCEL設定就好了。
可以簡單做的事情,或許不需要追求一直寫程式來優化,除非工作量真的大的重複性作業,基於效率上的需求,或許才思考是否製作程式來簡化自己的工作工作流程及時間。
下方簡單設定B2位置的核取方塊,儲存格連結到C2。
7. 製作完後效果就會像下圖一樣,當B2的核取方塊選取時,
關於階段2可參考以下連結影片
接下來就讓我們看看要怎麼製作核取方塊吧。
以下說明使用Excel 2019 ,版本不同或許有點差異,
但基本上製作的方法差不多是一樣的。
程式最終製作的成果會如下圖。
開始製作程式: 階段1 程式說明
Point!
1. 使用手動新增核取方塊
2. 使用VBA新增核取方塊(表單控制項)程式範例預覽
使用手動製作核取方塊
1. 開啟Excel 活頁簿,準備類似這樣的清單,
我們打算在代辦事項的右側加上選取方塊。
表單控制項,在表單控制巷裡有個打勾的圖案,就是本次的主角
核取方塊。
如果不知道怎麼開啟上發的開發人員標籤,
可以參考網站文章的 如何開始使用VBA 文章
文章內有教學如何開啟開發人員選項的說明。
3. 接著在需要的位置點一下,調整適當長度,放開滑鼠左鍵後,
就會出現像下方一樣的核取方塊,核取方塊預設是會有名稱的。
這邊的名稱可以使用滑鼠右鍵,選取編輯文字,修改名稱。
如果想要移動核取方塊,可以按著滑鼠右鍵進行拖拉,移動到想要的位置。
接下來選取儲存格右下角的點點往下拉,就可以一次製作多個核取方塊。
接著在核取方塊的地方按下滑鼠右鍵,這時會出現選單。
在選單內選擇控制項格式。
下方簡單設定B2位置的核取方塊,儲存格連結到C2。
注意 Excel內 儲存格的英文 C 和 2 前方的
$ 符號代表鎖定的意思。
現在看到左側A欄儲存格的代辦事項,顯示為紅色刪除。
要顯示這個效果,要進行另外一個條件式格式設定。
6. 要設定之前,先選擇要連結的儲存格,
選擇常用,接下來選擇條件式格式,再選擇新增規則。
這邊假設已經選取了A2的儲存格,並選擇了新增規則。
接下來要設定新增格式化的規則,這邊選擇使用公式來決定要格式化那些儲存格。
然後在下方的格式化在此公式為True的值內選取C2進行連結。
在設定好想要的格式後按下確定即可。
C2的位置會顯示True,接著剛剛設定格式化條件的A2,
會因為設定當True時,顯示格式化條件設定的格式。
當然數量少的時候你也可以一個一個設定,但是如果有100個,
也許就沒辦法這樣輕鬆了。
也正是因為這樣,會撰寫VBA可以提升重複作業上的效率。
關於階段1可參考以下連結影片
開始製作程式: 階段2
Point!
1. 新增核取方塊 + 條件式格式設定
2. 效果確認
階段2要撰寫的是新增核取方塊和條件式設定的部分。
這裡主要為階段1的延伸,階段1裡的設定,可以透過階段2撰寫的方式呈現。
撰寫的方式參考以下的程式碼。
程式碼
Sub AddCheckBoxes()
'宣告變數和資料型態
Dim count As Integer 'count為儲存格計算用宣告為整數
'宣告CheckBox新增時所在位置的變數
Dim cbLeft As Double 'CheckBox左側位置
Dim cbTop As Double 'CheckBox上端位置
Dim cbWidth As Double 'CheckBox的寬度
Dim cbHeight As Double 'CheckBox的高度
'關閉畫面更新
Application.ScreenUpdating = False
'For迴圈列出需要的核取方塊
'範例中最後一行數字為11
For count = 2 To 11
'設定B列 核取方塊(表單控制項) ============================
With Range("B" & count)
cbLeft = .Left
cbTop = .Top
cbWidth = .Width
cbHeight = .Height
End With
'新增核取方塊(表單控制項)及核取方塊的屬性選項
ActiveSheet.CheckBoxes.Add(cbLeft, cbTop, cbWidth, cbHeight).Select
With Selection
.Caption = "" '核取方塊文字為空白
.Value = xlOff '為非核取狀態
.Display3DShading = False '3D陰影不顯示
.LinkedCell = Range("C" & count).Address '連結的儲存格
End With
'設定C列的值為False ==============================
Range("C" & count).Value = False
'設定格式化條件 =================================
'追加格式化條件
Range("A" & count).FormatConditions.Add xlExpression, xlEqual, "=$C$" & count
'新增第一個條件式的字型格式
With Range("A" & count).FormatConditions(1).Font
.Strikethrough = True '刪除線
.Color = RGB(255, 0, 0) '顏色設定為紅色
.TintAndShade = 0 '色彩變淡或變深設為中性
End With
'如果為True則停止-設為False
Range("A" & count).FormatConditions(1).StopIfTrue = False
Next
'開啟畫面更新
Application.ScreenUpdating = True
'回復到選擇A1的狀態
Range("A1").Select
End Sub
關於階段2可參考以下連結影片
開始製作程式: 階段3
Point!
1. 清除核取方塊
2. 全選
3. 取消全選
4. 效果確認
階段3主要撰寫清除核取方塊,還有全部選取,
以及取消全部選取的程式。
階段3裡的清除核取方塊並非必要,只是在於如果新增A欄的資料後,
如果沒有清除之前的核取方塊,又按下新增按鈕時,
核取方塊會另外又多新增一個疊在上面。
多重堆疊的核取方塊有可能會造成錯誤。
因此設計這個功能,防止新增的核取方塊不斷堆疊。
全部選取和取消全部選取可能並非經常使用之功能,
可參考使用。
注意在下方的程式,只設定A2~A11,也就是範例的範圍,
如果需要更大的範圍,請參考以下程式碼再修改設定。
以符合您的需求。
清除核取方塊
程式碼
Sub RemoveCheckboxes()
'清除A2到A11的條件式格式設定資料
Range("A2:A11").FormatConditions.Delete
'清除B2到C11的資料
Range("B2:C11").ClearContents
'宣告cb變數為Checkbox物件類型
Dim cb As CheckBox
'使用For Each 針對目前工作表內的核取方塊做循環處理
For Each cb In ActiveSheet.CheckBoxes
'刪除
cb.Delete
Next
End Sub
全部選取
程式碼
Sub SelectAll()
'將C2~C11範圍的值設定為True
Range("C2:C11").Value = True
End Sub
取消全部選取
程式碼
Sub DeselectAll()
'將C2~C11範圍的值設定為False
Range("C2:C11").Value = False
End Sub
關於階段3可參考以下連結影片