#vba #radio-button #powerpoint
Вопрос:
Я перепробовал так много вариантов, но безуспешно, что потерял рассудок. Мне нужно задать группу переменных, в зависимости от того, какая кнопка выбора выбрана в данной группе. Есть 3 группы, просто обозначенные как OptionGroup1, OptionGroup2 и OptionGroup3. Когда кнопка «Пуск» выполняется, мне нужно определить, какие параметры выбраны, и установить соответствующие переменные для использования в другом месте кода. PowerPoint определенно не то же самое, что excel, и я, похоже, не могу подобрать для него правильный синтаксис. Эта конкретная попытка дает мне «ошибку времени выполнения 438», «объект не поддерживает это свойство или метод».
Set myDocument = ActivePresentation.Slides(1) Select Case myDocument.Shapes.GroupName = OptionGroup2 Case Is = 1: ACLDelay = 1 Case Is = 2: ACLDelay = 2 Case Is = 3: ACLDelay = 3 Case Is = 4: ACLDelay = Int((4 * Rnd) 1) End Select Select Case myDocument.Shapes.GroupName = OptionGroup1 Case Is = 1: RunInt = 15 Case Is = 2: RunInt = 60 Case Is = 3: RunInt = 30 Case Is = 4: RunInt = 5 End Select Select Case myDocument.Shapes.GroupName = OptionGroup1 Case Is = 1: MODDelay = 1.5 Case Is = 2: MODDelay = 1 Case Is = 3: MODDelay = 2 Case Is = 4: MODDelay = 0.5 End Select
Комментарии:
1. Похоже, вы совершенно не понимаете, как использовать конструкцию Select в VBA, а также как получить доступ к кнопкам в группе опций. Возможно, если бы вы могли добавить изображение своей формы к своему вопросу, все стало бы немного яснее. Также было бы полезно, если бы вы указали названия кнопок в каждой группе опций.
2. Можете ли вы лучше объяснить, чего вы хотите добиться?
Shapes
у собственности нетGroupName
собственности. Что должно означать от 1 до 4 в вашем коде? Имеют ли кнопки опций такие названия и ссылается ли на них код? В любом случае, ваш подход неверен, но для того, чтобы вам помогли, вам нужно дать нам понять, что вы хотите делать…
Ответ №1:
Пожалуйста, попробуйте следующий способ. «Opt1», «Opt1» и т.д. Должны быть названиями кнопок опций (вы также можете использовать их заголовок, но код должен быть адаптирован).:
Sub testOptButtGroupName() Dim ap As Presentation, sh As Shape, opB As MSForms.OptionButton Dim RunInt As Long, ACLDelay As Long 'you probably have to declare these variable at the module level Set ap = ActivePresentation For Each sh In ap.Slides(1).Shapes If sh.Type = msoOLEControlObject Then If TypeName(sh.OLEFormat.Object) = "OptionButton" Then Select Case sh.OLEFormat.Object.GroupName Case "OptionGroup1" Select Case sh.Name Case "Opt1" If sh.OLEFormat.Object.Value = True Then RunInt = 15 Case "Opt2" If sh.OLEFormat.Object.Value = True Then RunInt = 60 'and so on... End Select Case "OptionGroup2" Select Case sh.Name Case "Opt5" If sh.OLEFormat.Object.Value = True Then ACLDelay = 1 Case "Opt6" If sh.OLEFormat.Object.Value = True Then ACLDelay = 2 'and so on... End Select 'and so on... End Select End If End If Next Debug.Print RunInt, ACLDelay End Sub
На самом деле, использование имени элементов управления не требует использования их членства в группе…
Сейчас я покину свой кабинет. Если что-то не ясно, не стесняйтесь обращаться за разъяснениями. Я уточню их, когда буду дома.
Комментарии:
1. Спасибо за помощь, я пошел с проверенным и верным утверждением IF для простейшего, хотя и не самого эффективного.
2. @Hareborn Я не использую VBA в PowerPoint. Я попытался найти способ «извлечь» необходимый объект и просто поиграл с VBA. У меня есть вопрос: не
myDocument.Shapes.GroupName
вызвала ли строка ошибку? Формы не должны обладатьGroupName
свойством… Теоретически это должно быть только у объекта кнопки выбора. Имеет ли коллекция фигур такое (скрытое) свойство в PowerPoint? Вы можете использовать каждое событие кнопки выбораClick
, чтобы придать необходимое значение в тот момент, когда его значение изменяется,True
и просто использовать их при необходимости… Это должно быть наиболее эффективным способом обращения с ними3. Да, у него есть свойство «Имя группы», но я не смог найти способ получить к нему доступ. Каждая попытка возвращала «Ошибку времени выполнения 438» «Объект не поддерживает это свойство или метод». Побочный вопрос, я больше не помню, как отмечать код в комментариях, я не был здесь много лет.
4. Эта ошибка «сказала» именно то, что у нее его нет… Я имею в виду коллекцию «Простыней». Он принадлежит только определенному объекту, как вы можете видеть в опубликованном коде. Теперь я закрываю свой ноутбук…
5. Свойство GroupName действительно существует, поскольку это то, что я использовал в окне свойств в VBA, чтобы назначить кнопки опций их конкретным группам. В коде вы также можете назначить и изменить имя группы. Я просто не мог найти способ запросить имя группы, чтобы узнать, какая кнопка в группе была активна.
Ответ №2:
В качестве стартового для 10 вам необходимо реорганизовать конструкцию Select для групп опций.
Select Case MyDocument.Shapes.Groupname Case OptionGroup1 Case optionGroup2 Case OptionGroup3 End Select
Приведенная выше конструкция будет работать, если ‘MyDocument.Формы.Имя группы, опция группа1,2,3’ все строки, которые можно сравнить. Чтобы узнать, что происходит в каждом конкретном случае, вам необходимо предоставить информацию, запрошенную в моем комментарии выше. Я обновлю этот ответ, когда вы это сделаете.
Комментарии:
1. Вы проверяли этот подход? Свойство shapes не имеет такого
Groupname
свойства…2. @FaneDuru, Какая часть «Вышеупомянутой конструкции будет работать, если» MyDocument. Формы. Имя группы, опция группа1,2,3′ все строки, которые можно сравнить. — разве ты не понял?
3. Конструкция
MyDocument.Shapes.Groupname
вызовет ошибку, потому что, как я предположил,Groupname
не существует междуMyDocument.Shapes
свойствами. Вот почему я спросил, проверяли ли вы его. Возможно, у вас есть более приятная установка PowerPoint…4. @FaneDuru, Чтобы сделать это проще, что значит «Если», ты не понимаешь.
5. Я создаю 3D-анимированную программу тестирования времени для конвейерной системы для определения оптимизации времени выполнения. Система имеет 4 типа пользовательских входов для изменения скорости различных секций конвейера. Каждый раздел пользовательского ввода имеет четыре варианта управления скоростью, то есть 4 раздела с 4 вариантами. В каждой из 4 секций также есть 3 анимированные независимо движущиеся секции, которые управляются скоростью ввода пользователем. 3 группы кнопок выбора, перечисленные выше, независимы друг от друга и имеют 4 варианта ввода скорости
Ответ №3:
Я использовал простые утверждения IF, чтобы решить свою проблему. Это, безусловно, не самый эффективный метод, но на данный момент он работает.
If OptionButtonACL1s.Value = True Then ACLDelay = 1 End If If OptionButtonACL2s.Value = True Then ACLDelay = 2 End If If OptionButtonACL3s.Value = True Then ACLDelay = 3 End If If OptionButtonACLr.Value = True Then ACLDelay = Int((10 * Rnd) 1) End If If OptionButtonMOD5s.Value = True Then MODDelay = 0.5 End If If OptionButtonMOD1s.Value = True Then MODDelay = 1 End If If OptionButtonMOD15.Value = True Then MODDelay = 1.5 End If If OptionButtonMOD2s.Value = True Then MODDelay = 2 End If If OptionButtonRT5m.Value = True Then RunInt = 5 End If If OptionButtonRT15m.Value = True Then RunInt = 15 End If If OptionButtonRT30m.Value = True Then RunInt = 30 End If If OptionButtonRT1h.Value = True Then RunInt = 60 End If