Note: The other languages of the website are Google-translated. Back to English

如何只在Excel中的一組複選框中僅選中一個複選框?

如下面的屏幕截圖所示,對​​於第2行中列出的一組複選框,當僅選中或選中一個複選框時,其他復選框將被禁用。 如何實現呢? 本文中的VBA代碼可以為您提供幫助。

僅使用VBA代碼選中一個複選框


僅使用VBA代碼選中一個複選框

您可以運行以下VBA代碼,每次僅選擇一個複選框組中的一個複選框。 請執行以下操作。

1.首先,請根據需要插入複選框。 在這裡,您應該插入 ActiveX控件複選框 如下圖所示:

2.然後按 其他 + F11鍵同時打開 Microsoft Visual Basic for Applications 窗口。

3.在開幕 Microsoft Visual Basic for Applications 窗口中,單擊 插入 > 類模塊.

4.將班級名稱更改為 香港中文大學 在裡面 (姓名)的盒子 氟化鈉性能 窗格,然後將下面的VBA代碼複製並粘貼到相應的 推薦碼 窗口。 看截圖:

VBA代碼1:每次僅選擇一個複選框

Option Explicit
Public WithEvents Chk As MSForms.CheckBox
Private Sub Chk_Click()
Call SelOneCheckBox(Chk)
End Sub

Sub SelOneCheckBox(Target As Object)
Dim xObj As Object
Dim I As String
Dim n As Integer
If Target.Object.Value = True Then

    I = Right(Target.Name, Len(Target.Name) - 8)
    For n = 1 To ActiveSheet.OLEObjects.Count
      If n <> Int(I) Then
        Set xObj = ActiveSheet.OLEObjects.Item(n)
        xObj.Object.Value = False
        xObj.Object.Enabled = False
      End If
    Next
Else
    I = Right(Target.Name, Len(Target.Name) - 8)
    For n = 1 To ActiveSheet.OLEObjects.Count
      If n <> Int(I) Then
        Set xObj = ActiveSheet.OLEObjects.Item(n)
        xObj.Object.Enabled = True
      End If
    Next
End If
End Sub

5.現在點擊 插入 > 模塊,然後將下面的VBA代碼複製並粘貼到 模塊 窗口。

VBA代碼2:每次僅選擇一個複選框

Dim xCollection As New Collection
Public Sub ClsChk_Init()
Dim xSht As Worksheet
Dim xObj As Object
Dim xChk As ClsChk
   Set xSht = ActiveSheet
   Set xCollection = Nothing
    For Each xObj In xSht.OLEObjects
        If xObj.Name Like "CheckBox**" Then
            Set xChk = New ClsChk
            Set xChk.Chk = CallByName(xSht, xObj.Name, VbGet)
            xCollection.Add xChk
        End If
    Next
    Set xChk = Nothing
End Sub

6。 按 F5 鍵來運行代碼。

從現在開始,當選中工作表中的任何一個複選框時,其他復選框將被自動禁用,您可以取消選中該複選框以再次激活所有復選框。

備註:如果將新復選框添加到復選框組,請重新運行VBA代碼以再次激活所有復選框。 從復選框組中刪除複選框也需要重新運行代碼。


R興高采烈的文章:


最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (14)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
你好! 感謝這個有用的指南! 我還有一個問題:我同時使用列和行。 如果一個複選框值為真,則必須禁用同一行和列中的所有復選框。 我怎麼做? 最好的,莫滕
網站主持人對此評論進行了最小化
當我關閉 Excel 並再次打開文件時,複選框停止工作我該如何解決這個問題?
網站主持人對此評論進行了最小化
嗨,
請將工作簿另存為啟用 Excel 宏的工作簿,以便將代碼保存在工作簿中。 但是當你重新打開工作簿時,你需要進入代碼窗口手動運行模塊窗口中的代碼來激活它。
網站主持人對此評論進行了最小化
你好,有辦法嗎? 我想為多人使用它,我相信他們不會在打開後運行代碼......
網站主持人對此評論進行了最小化
Bonjour, Je suis dans la meme 情況。 Est-il possible que le module de classe "ClsChk" se lance automatiquement au démarrage ? 
網站主持人對此評論進行了最小化
嗨,我有同樣的問題是否有任何選項可以打開 Excel 並使用該功能?
網站主持人對此評論進行了最小化
嗨,很抱歉給您帶來麻煩。 您可以按照以下步驟解決問題。1。 將工作簿另存為 Excel 啟用宏 工作簿(單擊 文件 > 除上文所 > 選擇一個目標文件夾 > 選擇“Excel啟用宏的工作簿“ 在裡面 保存類型 下拉列表 > 節省);2。 將以下代碼添加到 的ThisWorkbook 代碼編輯器,如下面的屏幕截圖所示。;3。 保存代碼。 私有子 Workbook_Open()
在錯誤恢復下一頁
ClsChk_Init
END SUB

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
在錯誤恢復下一頁
ClsChk_Init
END SUB

私有子工作簿_SheetChange(ByVal Sh 作為對象,ByVal 目標作為範圍)
在錯誤恢復下一頁
ClsChk_Init
END SUB
查看附件 (1 / 5)
網站主持人對此評論進行了最小化

錯誤出現在第一個代碼下。
xObj.Object.Value = 假
網站主持人對此評論進行了最小化
嗨阿諾德,你有任何提示框嗎? 您使用的是哪個 Excel 版本?
網站主持人對此評論進行了最小化
如果您使用的只是複選框,它可以正常工作。
如果您添加任何其他 activeX 項並將控件分配給它們,則會引發 Arnold 提到的錯誤。
網站主持人對此評論進行了最小化
您確實需要解釋如何訪問類名才能更改它。 順便說一句,F4 打開屏幕左側的窗口,然後編輯類名。
網站主持人對此評論進行了最小化
我想逐行獲取此功能,而不是整個工作表。我應該如何修復此代碼? 我對vba不太熟悉。如果可以,請幫助我。
網站主持人對此評論進行了最小化
嗨,Min Ko Ko,
如果您只想逐行選擇一個選項,我建議您使用選項按鈕(表單控件)和分組框(表單控件)的組合。
1. 只需在工作表中繪製一個組框。
2. 保持 Group Box 處於選中狀態,然後在框內繪製 Option Buttons。
3. 重複這些步驟,在新行中插入新的組框和選項按鈕。
4. 由於分組框有標題和邊框,您可以在模塊代碼窗口中應用下面的VBA代碼來隱藏當前工作表中分組框的所有標題和邊框。
子切換可見()
將 myGB 調暗為 GroupBox
對於 ActiveSheet.GroupBoxes 中的每個 myGB
myGB.Visible = 假
下一個我的GB
END SUB
查看附件 (3 / 5)
網站主持人對此評論進行了最小化
Bonjour, Merci pour ce tuto tout fonctionne。 Cependant, je suis obligé d'éxécuter manuellement le "ClsChk" à chaque fois pour que cela fonctionne, mon fichier est un fichier groupe pour la société, serait-il possible qu'il se lance automatiquement ? 謝謝你。
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護