Я использую MS Excel 2007.

У меня есть следующий код в макросе, который создает две кнопки выбора (не активный X) в ячейке B25 .

Range("B25").Select
ActiveSheet.OptionButtons.Add(129.75, 540, 24, 20.25).Select
Selection.Name = " Select1Button "

Range("B25").Select
ActiveSheet.OptionButtons.Add(225.75, 540, 79.5, 21.75).Select
Selection.Name = " Select2Button "

Есть ли способ для макроса проверить, существует ли какой-либо из них в ячейке «B25», и если они это сделают, ничего не делать и завершить оставшуюся часть макроса, но если они не будут созданы, как описано выше?

Что-то вроде:

In CellB25 does "Select1Button" & "Select2Button" Exist?
Yes = Then ignore the ActiveSheet.OptionButtons.Add code and continue to run 
the rest of the macro code.

No - Then run the ActiveSheet.OptionButtons.Add code and continue to run the 
rest of the macro code.

Я застрял на этом в течение нескольких часов!

2 ответа2

0

Проект кода:

public sub createoptionbutton(xname,a,b,c,d)
dim obj as object
xname=trim(xname)
for each obj in activesheet.optionbuttons
    if obj.name=xname then exit sub
next
activesheet.optionbuttons.add(a,b,c,d).select
selection.name=xname
end sub

Отредактируйте его, как вам нужно.

PS. Вам не нужно выбирать какую-либо ячейку перед созданием опции - это не имеет значения. Просто укажите конкретный лист вместо ActiveSheet. И я бы рекомендовал установить свойство GroupBox дополнительно.

PPS. По запросу Rajesh S - функция, которая проверяет только существование опции:

public function optionbuttonexists(xname) as boolean
dim obj as object
xname=trim(xname)
for each obj in activesheet.optionbuttons
    if obj.name=xname then 
        optionbuttonexists = true
        exit sub
    end if
next
end function 

... и обратная функция

public function optionbuttonabsent(xname) as boolean
dim obj as object
xname=trim(xname)
for each obj in activesheet.optionbuttons
    if obj.name=xname then exit sub
next
optionbuttonabsent=true
end function 

Последняя функция позволяет решить авторскую задачу как

if optionbuttonabsent(" Select2Button ") then
    ActiveSheet.OptionButtons.Add(225.75, 540, 79.5, 21.75).Select
    Selection.Name = " Select2Button "
end if
0

Я хотел бы предложить вам решение в двух частях.

Первая часть поможет вам создать Option Button in Cells.

А вторая часть поможет вам определить, какая Option Button выбора была нажата для выполнения дальнейших действий.

Часть 1:

Этот VBA (Макрос) поможет вам создать Two Option buttons в ячейке C1 и D1 с группой / рамкой.

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 i As Integer

    ActiveSheet.OptionButtons.Delete
    ActiveSheet.GroupBoxes.Delete

    For i = 1 To 1 Step 1
        Set t = ActiveSheet.Range(Cells(i, 3), Cells(i, 3))
        Set s = ActiveSheet.Range(Cells(i, 4), Cells(i, 4))

        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 grbox = ActiveSheet.GroupBoxes.Add(t.Left, t.Top, t.Width + 50, t.Height)

        With btn1
          .Caption = ""
          .Display3DShading = True
          .LinkedCell = "E" & i
        End With

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

        With grbox
          .Caption = "My Group"
          .Visible = True
        End With
    Next i

End Sub

Как это устроено:

  1. Скопируйте и вставьте этот код как стандартный модуль.
  2. For i = 1 To 1 Step 1 определяет, что в 2 Option Buttons будут созданы Row 1 .
  3. Если вам нужно создать 4 Option Buttons то это должно быть так: For i = 1 To 2 Step 1 .
  4. ActiveSheet.Range(Cells(i, 3) определяет, что i - Row value а 3 - Column , доступны для редактирования.
  5. Lined Cell to Option Buttons - « E1 , доступны для редактирования.

Часть 2:

Этот макрос поможет вам определить, какая Option Button выбора была нажата для выполнения дальнейших действий.

Sub TheSelectCase()

  Select Case Range("E1").Value

  Case 1
   Your Code for further action.
  Case 2
   Your Code for further action.

  End Select
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .