簡體   English   中英

如何使用VBA在Excel 2010工作表中添加選項按鈕進行分組?

[英]How to add option buttons to group in Excel 2010 sheet using VBA?

我想向Excel 工作表 (而不是VBA表單)添加許多選項按鈕,並希望按行對它們進行分組。 結果應如下所示:
在此處輸入圖片說明

這是到目前為止我正在使用的代碼:

    For d = 1 To 31
            Set checkboxKrankCell = Range("H" + Trim(Str(d)))
            Set checkboxUrlaubCell = Range("I" + Trim(Str(d)))
            Set checkboxJazCell = Range("J" + Trim(Str(d)))
            groupWidth = checkboxKrankCell.Width + checkboxUrlaubCell.Width + checkboxJazCell.Width
            Set groupBoxOptionButtons = ActiveSheet.GroupBoxes.Add(checkboxKrankCell.Left - 1, checkboxKrankCell.Top - 2, groupWidth + 1, checkboxKrankCell.Height)
            With groupBoxOptionButtons
                .Name = "GroupBox_" + Trim(Str(d))
                .Caption = ""
            End With
            Set checkboxKrank = ActiveSheet.OptionButtons.Add(checkboxKrankCell.Left, checkboxKrankCell.Top - 1, checkboxKrankCell.Width, checkboxKrankCell.Height)
            With checkboxKrank
              .Caption = ""
            End With
  #1          checkboxKrank.GroupBox = groupBoxOptionButtons
            Set checkboxUrlaub = ActiveSheet.OptionButtons.Add(checkboxUrlaubCell.Left, checkboxUrlaubCell.Top - 1, checkboxUrlaubCell.Width, checkboxUrlaubCell.Height)
            With checkboxUrlaub
              .Caption = ""
            End With
            Set checkboxJaz = ActiveSheet.OptionButtons.Add(checkboxJazCell.Left, checkboxJazCell.Top - 1, checkboxJazCell.Width, checkboxJazCell.Height)
            With checkboxJaz
              .Caption = ""
 #2           .GroupBox = groupBoxOptionButtons
            End With
        Next d

我希望通過設置GroupBox屬性(請參閱#1或#2)將選項按鈕分配給當前行的組。 但是兩種方法都給我一個錯誤的說法

“對象不支持屬性或方法”。

任何幫助或提示,歡迎;-)
基於snb的技巧,我修改了我的功能,如下所示:

 Sub AddOptionButtons() ActiveSheet.OptionButtons.Delete For d = 1 To 31 Set checkboxKrankCell = Range("H" + Trim(Str(d + 4))) Set checkboxUrlaubCell = Range("I" + Trim(Str(d + 4))) Set checkboxJazCell = Range("J" + Trim(Str(d + 4))) option1Name = "Krank_" + Trim(Str(d)) option2Name = "Urlaub_" + Trim(Str(d)) option3Name = "Jaz_" + Trim(Str(d)) Set checkboxKrank = ActiveSheet.OptionButtons.Add(checkboxKrankCell.Left, checkboxKrankCell.Top - 1, checkboxKrankCell.Width, checkboxKrankCell.Height) With checkboxKrank .Caption = "" .Name = option1Name End With Set checkboxUrlaub = ActiveSheet.OptionButtons.Add(checkboxUrlaubCell.Left, checkboxUrlaubCell.Top - 1, checkboxUrlaubCell.Width, checkboxUrlaubCell.Height) With checkboxUrlaub .Caption = "" .Name = option2Name End With Set checkboxJaz = ActiveSheet.OptionButtons.Add(checkboxJazCell.Left, checkboxJazCell.Top - 1, checkboxJazCell.Width, checkboxJazCell.Height) With checkboxJaz .Caption = "" .Name = option3Name End With ActiveSheet.Shapes.Range(Array(option1Name, option2Name, option3Name)).Group Next d End Sub 


使用Shapes.Range(...)。Group我沒有任何錯誤。 但是,工作表上的所有選項按鈕仍然都是互斥的。
似乎分組在這里不起作用。

在空的工作簿上嘗試以下代碼。 據我了解,它將為您提供一個選擇,即每行僅選擇一個選項按鈕(據我所知)(我還創建了一個鏈接的單元格引用,以防萬一,如果您希望采取進一步的措施,請選擇用戶。):

Sub AddOptionButtons()
    Dim btn1 As OptionButton
    Dim btn2 As OptionButton
    Dim btn3 As OptionButton
    Dim grbox As GroupBox
    Dim t As Range
    Dim s As Range
    Dim p As Range
    Dim i As Integer

    ActiveSheet.OptionButtons.Delete
    ActiveSheet.GroupBoxes.Delete
    For i = 5 To 35 Step 1
        Set t = ActiveSheet.Range(Cells(i, 8), Cells(i, 8))
        Set s = ActiveSheet.Range(Cells(i, 9), Cells(i, 9))
        Set p = ActiveSheet.Range(Cells(i, 10), Cells(i, 10))
        Set btn1 = ActiveSheet.OptionButtons.Add(t.Left, t.Top, t.Width, t.Height)
        Set btn2 = ActiveSheet.OptionButtons.Add(s.Left, s.Top, s.Width, s.Height)
        Set btn3 = ActiveSheet.OptionButtons.Add(p.Left, p.Top, p.Width, p.Height)
        Set grbox = ActiveSheet.GroupBoxes.Add(t.Left, t.Top, t.Width + 100, t.Height)
        With btn1
          .Caption = ""
          .Display3DShading = True
          .LinkedCell = "M" & i
        End With

        With btn2
          .Caption = ""
          .Display3DShading = True
        End With

        With btn3
          .Caption = ""
          .Display3DShading = True
        End With

        With grbox
          .Caption = ""
          .Visible = False
        End With
    Next i
End Sub

我會用:

Sub M_snb()
  ReDim sn(2)

  For j = 1 To 2
   For jj = 1 To 3
    With Sheet1.OptionButtons.Add(Cells(j, jj).Left, Cells(j, jj).Top - 1, Cells(j, jj).Width, Cells(j, jj).Height)
     sn(jj - 1) = .Name
    End With
   Next
   Sheet1.Shapes.Range(sn).Group
  Next
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM