Indique uma macro para verificar se existe um objeto e, se sim, A. mas, se não, então faça B.?

0

Eu uso o MS Excel 2007.

Eu tenho o seguinte código em uma macro que cria dois botões de opção (não ativo X) na célula 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 "

Existe uma maneira de a macro verificar se ela já existe na célula 'B25' e, se o fizer, não fará nada e terminará o resto da macro, mas, se não o fizer, irá criá-la como descrito acima?

Algo como:

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.

Eu tenho estado preso nisso por horas!

    
por Kenny 12.10.2018 / 02:23

2 respostas

0

Gostaria de sugerir a solução em duas partes.

Parte um ajudará você a criar Option Button em Células.

E Parte dois ajudará você a determinar que Option Button foi clicado para executar outras ações.

Parte 1:

Este VBA (Macro) ajudará você a criar Two Option buttons em Cell C1 & D1 com grupo / frame.

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

Como funciona:

  1. Copiar & Cole este código como módulo padrão.
  2. For i = 1 To 1 Step 1 determina que 2 Option Buttons será criado em Row 1 .
  3. Se você precisar criar 4 Option Buttons , o deveria ser, For i = 1 To 2 Step 1 .
  4. ActiveSheet.Range(Cells(i, 3) determina que i é Row value e 3 é Column , são editáveis.
  5. Lined Cell to Option Buttons é E1 , o que  é editável.

Parte 2:

Esta macro irá ajudá-lo a determinar que Option Button foi clicado para tomar outras medidas.

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
    
por 12.10.2018 / 12:33
0

Código de rascunho:

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

Edite-o conforme necessário.

PS. Você não precisa selecionar nenhuma célula antes da criação da opção - não importa. Basta apontar para uma planilha específica em vez do ActiveSheet. E eu recomendo definir a propriedade GroupBox adicionalmente.

PPS. A pedido de Rajesh S - a função que verifica apenas a existência do botão de opção:

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 

... e função backward

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 

A última função permite resolver a tarefa do autor como

if optionbuttonabsent(" Select2Button ") then
    ActiveSheet.OptionButtons.Add(225.75, 540, 79.5, 21.75).Select
    Selection.Name = " Select2Button "
end if
    
por 12.10.2018 / 08:04