[VBA] 如何將「核取方塊」變大 ? (方法1)

[VBA] 如何將「核取方塊」變大 ? (方法1)

更新於 發佈於 閱讀時間約 8 分鐘

前言:

怎麼把 表單控制項 的 核取方塊 變大 ? 這是個很久很久以前就遇過的問題,根據查得的資訊顯示,至今約莫 11 年前就有人提過這問題了。

表單控制項 的 核取方塊

表單控制項 的 核取方塊

目前 Excel 系統仍然沒有提供調整其大小的方式,但由一些資訊得知,之前還是有很多高手提出一些解決方法。
有字型方法、VBA方法 ( ActiveX 控制項的 TextBox、利用 VBA 控制儲存格內的字型 ) ... 等等。

本篇將介紹如何用 VBA 控制儲存格內的字型,在輸入特定字元,即顯示特定圖案,來達到模擬核取方塊的目的。


操作:

  1. 點擊藍色文字框使其文字變為「核取方塊 (已開啟)」,即可在空白儲存格,任意輸入資料,此時左邊的儲存格會立即出現一個核取方塊。
  2. 只要在其上方,滑鼠左鍵連點兩下,即可自動變成核取圖案,並在最右方會自動顯示核取的日期時間。
  3. 在核取方框上方,再次連點兩下,會出現「是否取消勾選」,點【是】,即變成不核取狀態並刪除最右方的日期時間。
  4. 點擊藍色文字框使其文字變為「核取方塊 (已關閉)」,可關閉自動核取方塊功能。


成果:

以下是成果影片,請先欣賞~ 謝謝。


工作表

【Sheet1】內的程式碼

Private Sub Worksheet_Change(ByVal T As Range)

If ActiveSheet.Shapes("REC_CheckBox").TextFrame.Characters.Text = "核取方塊 (已關閉)" Then Exit Sub

If T.Count > 1 Then Exit Sub ' 單選儲存格

Application.EnableEvents = False

If T.Offset(, -1) = "" And T <> "" Then
With T.Offset(, -1)
.Value = ChrW(163)
.Font.Name = "Wingdings 2"
.Font.Size = 30 ' 不核取
End With

With T ' 核取方塊內容
.Font.Name = "微軟正黑體"
.Font.Size = 12
End With
ElseIf (T.Offset(, -1) = ChrW(163) Or T.Offset(, -1) = ChrW(82)) And T = "" Then
' 將 核取方塊位置 和 時間戳記 刪除 !
With Range(T.Offset(, -1).Address & "," & T.Offset(, 1).Address)
.Value = ""
.Font.Name = "微軟正黑體"
End With
End If

Application.EnableEvents = True

End Sub


Private Sub Worksheet_BeforeDoubleClick(ByVal T As Range, Cancel As Boolean)

If T(1, 2) = "" Then Exit Sub ' 抓核取方塊右邊的內容 ,為空不執行
If Not (T(1, 1) = ChrW(163) Or T(1, 1) = ChrW(82)) Then Exit Sub

Application.EnableEvents = False

If T.Value = ChrW(82) Then If MsgBox("是否取消勾選?", vbYesNo) = vbNo Then GoTo Handle_Cancel

With T
.Value = IIf(.Value = ChrW(163), ChrW(82), ChrW(163))
.Font.Name = "Wingdings 2"
.Font.Size = 30
End With

If T.Value = ChrW(82) And T(1, 3) = "" Then
With T(1, 3)
.Value = Now()
.Font.Name = "微軟正黑體"
.NumberFormatLocal = "yyyy/mm/dd hh:mm:ss"
End With
Columns(Split(T(1, 3).Address, "$")(1) & ":" & Split(T(1, 3).Address, "$")(1)).EntireColumn.AutoFit
ElseIf T.Value = ChrW(163) Then
T(1, 3) = ""
MsgBox "【 時間戳記 】 資料已刪除 !!"
T(1, 3).Select
Else
MsgBox "有資料 !! 【 時間戳記 】 無法記錄 !!"
T(1.3).Select
End If

Handle_Cancel:

Application.EnableEvents = True
Cancel = True

End Sub


模組

【Module1】內的程式碼

Sub Turn_OnOff_CheckBox()
Dim REC_text As String
REC_text = ActiveSheet.Shapes("REC_CheckBox").TextFrame.Characters.Text

If REC_text = "核取方塊 (已關閉)" Then
ActiveSheet.Shapes("REC_CheckBox").TextFrame.Characters.Text = "核取方塊 (已開啟)"
ElseIf REC_text = "核取方塊 (已開啟)" Then
ActiveSheet.Shapes("REC_CheckBox").TextFrame.Characters.Text = "核取方塊 (已關閉)"
Else
ActiveSheet.Shapes("REC_CheckBox").TextFrame.Characters.Text = "核取方塊 (Error)"
End If
End Sub

Sheet1 工作表內的 REC_CheckBox 矩形,需指定巨集為 Module1 的「 Turn_OnOff_CheckBox 」。


彩蛋

能看到最後面,不會被這麼多程式碼嚇到,可見 你/妳 有成為 VBA 高手的潛力唷 ~ 恭喜 !!




檔案下載


下一篇 [VBA] 如何將「核取方塊」變大 ? (方法2),將使用 Excel 常見的文字框來設計成 核取方塊 樣式,敬請期待 ~

以上就是這次的分享,請持續關注 和 Meiko微課頻道,謝謝大家 ~

有任何問題,請在下方留言討論,或加入 LINE社群 Meiko微課小綠群(粉絲交流群),歡迎您的加入。


avatar-img
Meiko微課頻道的沙龍
146會員
47內容數
Meiko微課頻道主要以辦公室應用為出發點,針對上班族群所遇到的問題進行分享
留言
avatar-img
留言分享你的想法!
本篇文章分享如何使用 Excel VBA 程式碼去除 Excel 儲存格裡文字或英文句子前後的空白,提供【基礎版】和【進階版】兩種 VBA 程式碼範例,並比較其功能差異。進階版程式碼可以保留句子中間的空白,只去除句子頭尾的空白。文章也包含程式碼下載連結以及相關參考資源。
5/5UNICHAR160
本文說明如何使用Excel函數 SUMPRODUCT 和 IFERROR 和 SUBSTITUTE 解決數值加總顯示問題,並提供檔案範例和公式說明。此外,文章還包含一些與【太極拳】相關的參考資料連結。
5/5UNICHAR(160)
本篇文章提供一個利用 Excel VBA 和 Google Map API,自動計算起迄地址里程數的解決方案。分享開發過程的心路歷程,以及如何克服使用Google Map API的挑戰,並感謝 Meiko老師 的教學 和 ChatGPT o1 pro 的協助,並提供檔案免費下載。
5/5GoogleMapAPI
本篇文章分享如何使用 Excel VBA 程式碼去除 Excel 儲存格裡文字或英文句子前後的空白,提供【基礎版】和【進階版】兩種 VBA 程式碼範例,並比較其功能差異。進階版程式碼可以保留句子中間的空白,只去除句子頭尾的空白。文章也包含程式碼下載連結以及相關參考資源。
5/5UNICHAR160
本文說明如何使用Excel函數 SUMPRODUCT 和 IFERROR 和 SUBSTITUTE 解決數值加總顯示問題,並提供檔案範例和公式說明。此外,文章還包含一些與【太極拳】相關的參考資料連結。
5/5UNICHAR(160)
本篇文章提供一個利用 Excel VBA 和 Google Map API,自動計算起迄地址里程數的解決方案。分享開發過程的心路歷程,以及如何克服使用Google Map API的挑戰,並感謝 Meiko老師 的教學 和 ChatGPT o1 pro 的協助,並提供檔案免費下載。
5/5GoogleMapAPI