Скажите макросу, чтобы проверить, существует ли объект, и если да, сделайте A., но если нет, тогда сделайте B.

522
Kenny

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

У меня есть следующий код в макросе, который создает две кнопки Option (не активные 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. 

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

0
Позвольте мне сказать, что кнопка Option может быть создана как в ячейке, так и в элементах управления ActiveX. И вы можете установить дальнейшие действия соответственно. Проверьте мой пост поможет вам много lot Rajesh S 5 лет назад 0

2 ответа на вопрос

0
Akina

Проект кода:

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 
Ваш код нуждается в некоторой коррекции ,,, `public sub createoptionbutton (xname, a, b, c, d)` никогда не сработает ,, а OP требует, как проверить наличие кнопок Option! Rajesh S 5 лет назад 0
@RajeshS * никогда не сработает * Конечно, его нужно вызывать. Но тот, кто создает код, размещенный в вопросе, может сделать это, я думаю ... * OP требует, как проверить наличие кнопок выбора * Большая часть кода делает именно это. Akina 5 лет назад 0
0
Rajesh S

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

Первая часть поможет вам создать Option Buttonв ячейках.

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

Часть 1:

Этот VBA (Macro) поможет вам создать Two Option buttonsв Cell C1& D1with Group / 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 

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

  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 
Рад помочь вам, @kenny, продолжайте спрашивать☺ Rajesh S 5 лет назад 0

Похожие вопросы