2015-05-01 1 views
1

Я пытаюсь выполнить два набора элементов управления в пользовательской форме. Если комбинация из двух элементов управления (togglebuttons) истинна, тогда сделайте что-нибудь. Sub вызывается из пользовательской формы, где создаются элементы управления. Это первый раз, когда я использовал переменную управления пользовательской формой, код ниже не будет компилироваться, так что это, вероятно, совершенно неправильно. Любые предложения, пожалуйста?Элементы управления пользовательской формой - значение цикла и проверки

Обновлен образец кода, но я получаю ошибку компиляции. См изображение ниже:

compile error

Private Sub CONTROLS_Click() 
Dim X As Integer, Y As Integer 
Dim BOOK As Variant, STRAT As Variant 

BOOK = Array("TYPE1", "TYPE2") 
STRAT = Array("FAST", "MEDIUM", "SLOW") 


For X = LBound(BOOK) To UBound(BOOK) 
    If Me.CONTROLS(BOOK(X)).Value = True Then 
     For Y = LBound(STRAT) To UBound(STRAT) 
      If Me.CONTROLS(STRAT(Y)).Value = True Then 
       'DO SOMETHING 
      End If 
     Next Y 
    End If 
Next X 


End Sub 
+0

Тот факт, что 'Me.CONTROLS (...)' остается в верхнем регистре вместо автоматической коррекции VBE, делает его «Me.Controls (..)», как это должно меня беспокоить. Это похоже на то, что вы использовали ** CONTROLS ** как имя для чего-то, и вы перезаписали его зарезервированное использование. – Jeeped

ответ

1

Это каждый массив 1.

BOOK = Array("TYPE1, TYPE2") 
STRAT = Array("FAST,MEDIUM,SLOW") 

Они должны быть,

BOOK = Array("TYPE1", "TYPE2") 
STRAT = Array("FAST", "MEDIUM", "SLOW") 

Вариантные массивы, как правило, от нуля; первый элемент в массиве BOOK находится в BOOK (0). Они используют индекс , когда он заполняется непосредственно с листа, если явно указано, чтобы начать с 1. Лучше всего использовать LBound function и UBound function для определения всех нижних и верхних границ все время.

Private Sub CONTROLS_Click() 
    Dim X As Integer, Y As Integer 
    Dim BOOK As Variant, STRAT As Variant 

    'Type1, Type2, Fast, Medium and Slow are the names of the togglebuttons 
    BOOK = Array("TYPE1", "TYPE2") 
    STRAT = Array("FAST", "MEDIUM", "SLOW") 

    For X = LBound(BOOK) To UBound(BOOK) 
     If Me.CONTROLS(BOOK(X)).Value = True Then 
      For Y = LBound(STRAT) To UBound(STRAT) 
       If Me.CONTROLS(STRAT(Y)).Value = True Then 
        'DO SOMETHING 
       End If 
      Next Y 
     End If 
    Next X 

End Sub 

Это должно исправить ваше назначение массива и вложенные петли For ... Next.

+0

Спасибо Jeeped, но я получаю ошибку компиляции. – Zeus

+0

@ Zeus - Как-то объявление BOOK получило обращение к BOOK_COMP, делая все другие использования BOOK недействительными. Не знаю, как это произошло, но я исправил его сейчас. – Jeeped

+0

Я заметил это также и изменил его, но я все еще получаю ошибку компиляции даже с исправлением. Я уверен, что это можно сделать ... любые идеи, почему он не будет компилироваться? – Zeus