Skip to main content

如何在 Excel 中勾選一個核取方塊時取消另一個核取方塊的勾選?

Author: Siluvia Last Modified: 2025-05-12

如下方影片所示,假設有一份需要最終確認的採購清單。在檢查清單時,您發現某些類別中已勾選的項目超出預算,需要重新選擇。由於清單過長,現在您需要一種更有效的方法,在某一類別中勾選新核取方塊時自動取消原先已勾選的核取方塊。本教程逐步演示該方法,幫助您完成操作。

使用 VBA 程式碼在勾選新核取方塊時取消另一個核取方塊的勾選


使用 VBA 程式碼在勾選新核取方塊時取消另一個核取方塊的勾選

如上述示範所示,名為 Checkbox1 Checkbox2Checkbox3、...、Checkbox10 的十個核取方塊被分為三組,並位於表格中的不同類別中。

在此範例中,Checkbox1、2、3 屬於一組,Checkbox4、5、6、7 屬於另一組,Checkbox8、9、10 則在同一組。在每一組中,一次只能勾選一個核取方塊。當勾選某個核取方塊時,另一個核取方塊會自動取消勾選。

現在讓我們看看如何應用以下 VBA 程式碼來解決這個問題。

1. 右鍵點擊工作表標籤,然後從快捷選單中點擊 檢視程式碼

A screenshot showing the option View Code in the context menu of a sheet tab in Excel

2. 在開啟的 Microsoft Visual Basic for Applications 視窗中,將以下 VBA 程式碼貼到工作表(程式碼)視窗中。

A screenshot of the VBA code editor in Excel with example VBA code for managing checkboxes

VBA 程式碼:在勾選新核取方塊時取消另一個核取方塊的勾選

Dim xBol As Boolean
'Updated by Extendoffice 20220816
Private Sub CheckBox1_Change()
SetCheckBoxes "CheckBox1"
End Sub

Private Sub CheckBox2_Change()
SetCheckBoxes "CheckBox2"
End Sub

Private Sub CheckBox3_Change()
SetCheckBoxes "CheckBox3"
End Sub

Private Sub CheckBox4_Change()
SetCheckBoxes "CheckBox4"
End Sub

Private Sub CheckBox5_Change()
SetCheckBoxes "CheckBox5"
End Sub

Private Sub CheckBox6_Click()
SetCheckBoxes "CheckBox6"
End Sub

Private Sub CheckBox7_Click()
SetCheckBoxes "CheckBox7"
End Sub
Private Sub CheckBox8_Click()
SetCheckBoxes "CheckBox8"
End Sub
Private Sub CheckBox9_Click()
SetCheckBoxes "CheckBox9"
End Sub
Private Sub CheckBox10_Click()
SetCheckBoxes "CheckBox10"
End Sub

Private Function SetCheckBoxes(mCheckBoxName As String)
Dim x As Long
Dim xAllArr
Dim xArrItem
Dim xI, xJ
If Not xBol Then Exit Function
'In the following line, the checkboxes enclosed in double quotes belong to the same group, and each checkbox is separated by a comma. To add more checkbox groups, please enclose the checkboxes in new double quotes.
xAllArr = Array("CheckBox1,CheckBox2,CheckBox3", "CheckBox4,CheckBox5,CheckBox6,CheckBox7", "CheckBox8,CheckBox9,CheckBox10")
For xI = LBound(xAllArr) To UBound(xAllArr)
If InStr(xAllArr(xI), mCheckBoxName) > 0 Then
xBol = False
xArrItem = Split(xAllArr(xI), ",")
For xJ = LBound(xArrItem) To UBound(xArrItem)
If xArrItem(xJ) <> mCheckBoxName Then
Me.OLEObjects(xArrItem(xJ)).Object.Value = False
End If
Next
End If
Next
xBol = True
End Function

Private Sub Worksheet_Activate()
xBol = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
xBol = True
End Sub

注意事項

1) 在程式碼中,Checkbox1、Checkbox2、...、Checkbox10 是核取方塊的名稱;
2) 在以下這一行中,雙引號內的核取方塊屬於同一組,每個核取方塊之間用逗號分隔。若要新增更多核取方塊組,請將核取方塊放在新的雙引號內。
xAllArr = Array("CheckBox1,CheckBox2,CheckBox3", "CheckBox4,CheckBox5,CheckBox6,CheckBox7", "CheckBox8,CheckBox9,CheckBox10")
3) 這些核取方塊是 ActiveX 控制項核取方塊。

3. 按下 Alt + Q 鍵關閉 Microsoft Visual Basic for Applications 視窗。

接著,當您勾選某一組中的新核取方塊時,原先已勾選的核取方塊將自動取消勾選,如下方 GIF 所示。


示範:在 Excel 中勾選核取方塊時取消另一個核取方塊的勾選

Kutools for Excel:超過 300 種實用工具任您使用!永久免費享受AI功能!立即下載!

最佳辦公效率工具

🤖 Kutools AI 助手:基於智能執行方式革新數據分析:智能執行   |  生成代碼  |  創建自訂公式  |  分析數據並生成圖表  |  調用 Kutools 函數
熱門功能查找、標記重複值或識別重複項   |  刪除空行   |  合併列或單元格而不丟失數據   |   四捨五入無需公式 ...
高級 LOOKUP多條件 VLookup    多值 VLookup  |   多表查找   |   模糊查找 ....
高級下拉列表快速創建下拉列表   |  依賴下拉列表   |  多選下拉列表 ....
列管理器添加特定數量的列  |  移動列  |  切換隱藏列的可見狀態  |  比較區域和列 ...
特色功能網格聚焦   |  設計檢視   |   增強編輯欄    工作簿與工作表管理器   |  資源庫(自動文本)   |  日期提取器   |  合併資料   |  加密/解密儲存格    按列表發送電子郵件   |  超級篩選   |   特殊篩選(篩選粗體/斜體/刪除線...) ...
頂級 15 種工具集12 個文本工具添加文本刪除特定字符、...)   |   50+ 圖表 類型甘特圖、...)   |   40+ 實用 公式基於生日計算年齡、...)   |   19 個插入工具插入QR碼根據路徑插入圖片、...)   |   12 個轉換工具金額轉大寫匯率轉換、...)   |   7 個合併與分割工具高級合併行分割儲存格、...)   |   ... 還有更多

使用 Kutools for Excel 提升您的 Excel 技巧,體驗前所未有的高效。 Kutools for Excel 提供超過 300 種高級功能來提高生產力並節省時間。  點擊這裡獲取您最需要的功能...


Office Tab 將標籤式界面帶到 Office,讓您的工作更加輕鬆

  • 在 Word、Excel、PowerPoint、Publisher、Access、Visio 和 Project 中啟用標籤式編輯和閱讀。
  • 在同一窗口的新標籤中打開和創建多個文檔,而不是在新窗口中。
  • 將您的生產力提高 50%,每天為您減少數百次鼠標點擊!