Страницы: 1
RSS
Смена параметров Frame при изменение значений Control. Цикл
 
Доброго времени суток!

Ребята нужна помощь вот в каком вопросе:
Есть массив OptionButton и массив Frame. Хочется, чтобы при изменении Value одного из OptionButton изменялся BackColor определенного Frame.
в вопросах VBA для Excel новичок, своими силами дошел до такого кода:
Код
Private Function OPBchange()
    Dim xxx As Control
   Dim www As String

   
    For Each xxx In Frame_11.Controls
        If TypeName(xxx) = "OptionButton" Then
            
            If xxx.Value = True Then
           cCont.BackColor = &HFF&
              www = xxx.Name
            If xxx.Name <> "" Then
            FrameOptionButton_13.Caption = www 'ВОТ ТУТ НИКАК НЕ МОГУ ПОДОБРАТЬ КОД!!!
 End If            
          Else
           XXX.BackColor = &HE0E0E0
          
            End If
       End If
  Next XXXX
End Function
и еще, функция вызывается кодом:
Код
Private Sub OptionButton_15_Change()
Call OPBchange
End Sub
Который приходиться прописывать для каждой OptionButton, возможно ли тоже каким-нибудь циклом заменит?

Заранее спасибо!
 
Лучше в файле все это покажите, а то пишите про изменение
Цитата
chest написал: BackColor определенного Frame
а 'ВОТ ТУТ НИКАК НЕ МОГУ ПОДОБРАТЬ КОД!!!' стоит напротив строки присвоения значения свойству Caption
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
а 'ВОТ ТУТ НИКАК НЕ МОГУ ПОДОБРАТЬ КОД!!!' стоит напротив строки присвоения значения свойству Caption
Да, именно так. Насколько мне понятно, нужно заменить код:
Код
 FrameOptionButton_13.Caption = www 
На такой, который бы мог Фрейму с  значением соответствующем OptionButton менять параметр BackColor
Изменено: chest - 05.09.2015 16:05:48
 
Вот как-то так. Привязался к именам контролов, но пришлось их поменять. Самому не очень нравиться, но работает
Изменено: Sanja - 05.09.2015 17:00:13 (небольшая оптимизация кода)
Согласие есть продукт при полном непротивлении сторон
 
Тьфу-ты!, Вот же оно! Зачем там вообще Frame под картинки, можно обойтись самими Option. Слово ВАРИАНТ напишите на лейблах.
Согласие есть продукт при полном непротивлении сторон
 
Спасибо огромное за оперативность и дельные советы!)

п.с. Непонятно каким чудом, но мне тоже пришла идею расширить OptionButton :)
 
Sanja,

Очень выручает твой код! Вот только никак не могу разобраться, что же все-таки несет в себе " Right(cCont2.Name, 2) = Right(cCont.Name, 2)". Как именно им пользоваться, какие параметры есть? Можешь подсказать?

И еще, Пытаюсь применить ваш код к CheckBox   -- но вот никак не могу разобраться, что к чему). Подскажи, если в силах.

в приложении - твой, чуть доработанный мною код:
Код
Private Sub OPBchange()
Dim cCont As Control
    For Each cCont In Frame_Profil1.Controls
        If TypeName(cCont) = "OptionButton" Then
            If cCont.Value = True Then
                cCont.BackColor = &HC0C0C0
                GoSub bcFrame
            Else
                cCont.BackColor = &HE0E0E0
                GoSub bcFramea

            End If
        End If
    Next
Exit Sub
 
bcFrame:
    For Each cCont1 In Frame_Kartinka_Stena1.Controls
        If TypeName(cCont1) = "Image" And Right(cCont1.Name, 2) = Right(cCont.Name, 2) Then
            cCont1.Visible = True
        End If
    Next
    Return

bcFramea:
For Each cCont2 In Frame_Kartinka_Stena1.Controls
        If TypeName(cCont2) = "Image" And Right(cCont2.Name, 2) = Right(cCont.Name, 2) Then
            cCont2.Visible = False
        End If
    Next
    Return
End Sub
 
А! и еще! Для вызова функцию приходить писать очень много кода , напр:
Код
Private Sub OptionButton111_Click()
    Call OPBchange
End Sub
Private Sub OptionButton112_Click()
    Call OPBchange
  
End Sub

Private Sub OptionButton121_Click()
    Call OPBchange
End Sub
Private Sub OptionButton122_Click()
    Call OPBchange
End Sub
Private Sub OptionButton123_Click()
    Call OPBchange
End Sub
Private Sub OptionButton124_Click()
    Call OPBchange
End Sub
Private Sub OptionButton125_Click()
    Call OPBchange
End Sub

Private Sub OptionButton131_Click()
    Call OPBchange
End Sub
Private Sub OptionButton132_Click()
    Call OPBchange
End Sub
Private Sub OptionButton133_Click()
    Call OPBchange
End Sub
Private Sub OptionButton134_Click()
    Call OPBchange
End Sub
Private Sub OptionButton135_Click()
    Call OPBchange
End Sub

Private Sub OptionButton141_Click()
    Call OPBchange
End Sub
Private Sub OptionButton142_Click()
    Call OPBchange
End Sub

Возможно ли как_либо упростить запуск,
 
Цитата
chest написал: твой код
Цитата
chest написал: ваш код
Второе написание правильное )
 
Цитата
что же все-таки несет в себе " Right(cCont2.Name, 2) = Right(cCont.Name, 2)"
В моем коде эта строка сравнивала 2 символа справа в имени OptionButton с такими-же символами в имени Frame (почитайте справку по Right)
А что хотите Вы сделать своим кодом?
Цитата
приходить писать очень много кода
А как Вы хотите обрабатывать события контролов? Только кодом. Хотя можно создать свой класс и в модуле класса все это прописать, но в этом я не силен.
И у Вас что, действительно больше 140 OptionButton? Пользователи не запутаються?
Согласие есть продукт при полном непротивлении сторон
 
Два крайних символа? никак не могу понять, как должны соотносить имена..
То есть, напр. КНОПКА CheckBox с именем "cbCH123" и картинка"okImage123 " будут обрабатываться?

Что думаю сделать:
попробовать ввести переменную и выполнять код по переменном..
Думаю в этом направлении:
Код
Private Sub UserFormInitialisation () 
Dim laganame as String
Dim Imglaga as String
   Dim laga As Control


   For x = 0 To UserForm.Controls.Count - 3

      Set  laga = UserForm.Controls.Item(x)


Imglaga.Value = Laga.Name
   Next x

   Unload Me
End Sub


Но сейчас  это так, набор фраз, на которые ориентируюсь при поиске решения
Изменено: chest - 12.09.2015 12:05:26
 
Что значит обрабатываться?
Повторю вопрос: что Вы хотитете сделать своим кодом?
И чем не подошел второй вариант (сообщение #5, вообще без Frame)?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал: И чем не подошел второй вариант (сообщение #5, вообще без Frame)?
Подошел, но только для изменения optBT) а сейчас уже стремлюсь изменять параметры определенных Control
 
Цитата
Но сейчас это так, набор фраз,
Это точно. И первый код то-же.
Словами можете сказать что нужно? Не в терминах VBA (про свойство контролов и т.п.), а просто, по русски
Согласие есть продукт при полном непротивлении сторон
 
Как-то так)
 
Сейчас файл в таком формате посмотреть не смогу.
Перезалейте в формате *.xls или подождите другого помогающего
Согласие есть продукт при полном непротивлении сторон
 
Извините, долго пришло урезать размер файла
 
Извините но понятнее не стало. ЧТО должно происходить при выборе какого-нибудь optBT? Я почти два часа от Вас добиваюсь ответа на этот вопрос, но видно не судьба.
И зачем там столько Frame? Они очень утежеляют форму и усложняют код. Зачем картинку во Frame вставлять? Зачем Frame во Frame, а не просто на форму? Но самый главный вопрос в начале сообщения  
Согласие есть продукт при полном непротивлении сторон
 
Попробую подсказать без Ваших ответов.
В контролах Image есть свойство Tag. Запишите в него какой нибудь признак (например var1 для картинок Вариант1) и при переборе контролов считываете его. При выполнении условия типа Image1.Tag = "var1" делайте картинку видимой/или наоборот
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Да, мне кажется, вы поняли меня.У меня получается очень много OptionButton и хотелось бы не прописываться проверку Вкл\Выкл  по изменению для каждой кнопки, а запустить макрос( например, вместе с UserForm) и чтобы он отслеживал изменения option button на странице.
Это реально?
 
Ну тогда Вам действительно прямая дорога к Модулям классов. В статье пример для TextBox'ов
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Читают тему
Наверх