2013-09-11 4 views
0

Я работаю над базой данных доступа 2010. Im довольно новичок в этом и не имеет большого знания VBA.looping через combox в форме доступа VBA

У меня есть форма (на основе запроса), отображающая в текстовом поле тестовую частоту определенных элементов. он называется «TestFrequency»

Затем у меня есть 3 комбинированных блока (по названию: Year1, Year2 и Year3, соответственно).

Я добавил кнопку и создал событие en "Onclick", что я пытаюсь сделать, это установить значение comboboxes в зависимости от значения testfrequency. Я также добавил несколько всплывающих окон сообщений, когда это событие будет завершено.

Im пытается с помощью следующего кода, но не работает:

Private Sub Reset_Click() 
Dim Response As VbMsgBoxResult 
Response = MsgBox("Do you want to reset planning to default test frequency?", vbQuestion + vbYesNo, "Planning Settings") 
If Response = vbNo Then Exit Sub Else 
Dim ctrl AS Controls 
For Each ctrl From Me.Controls 
If TestFrequency.Value = "Test Annually" Then 
    Me.Year1.Value = "Yes" 
    Me.Year2.Value = "Yes" 
    Me.Year3.Value = "Yes" 
    ElseIf TestFrequency.Value = "Test Every 2 years" Then 
    Me.Year1.Value = "No" 
    Me.Year2.Value = "Yes" 
    Me.Year3.Value = "No" 
    ElseIf TestFrequency.Value = "Test every 3 years" Then 
    Me.Year1.Value = "No" 
    Me.Year2.Value = "No" 
    Me.Year3.Value = "Yes" 
    ElseIf TestFrequency.Value = "Ad-hoc" Then 
    Me.Year1.Value = "No" 
    Me.Year2.Value = "No" 
    Me.Year3.Value = "No" 
    End If 
Next ctrl 
    MsgBox "Settings were changed.", vbInformation 
End If 
End Sub 

Может кто-нибудь, пожалуйста, помогите мне? благодаря!

+0

Вам не нужно для цикла. И избавиться от 'Me.' как его внутри кодов формы. Я не понимаю вашу логику в представлении формы, не должен ли 'TestFrequency' быть ComboBox, а когда выбран/изменен, изменяет другие comboboxes (я бы использовал CheckBox для Year1, Year2, Year3)? – PatricK

+0

Спасибо за ваш комментарий Патрик. что «TestFrequency» - это значение, вычисленное из другого запроса. Кроме того, я бы не нуждался в циклах, но когда я не использую цикл, он изменяется только для первого элемента формы (форма основана на запросе и содержит около 170 элементов). Наконец, причина, по которой я использую combobox в Year1, Year2 и Year3, заключается в том, что я хочу дать возможность пользователю настраивать, когда каждый предмет может быть протестирован (год 1, год2, год 3), в то время как кнопка клика является настройки по умолчанию. Спасибо! – Matos

ответ

0

Если «Да» в верхней части списка, и «Нет» это следующий, то попробуйте это (ComboBox использует .ListIndex для выбора):

Private Sub Reset_Click() 
    If vbNo = MsgBox("Do you want to reset planning to default test frequency?", vbQuestion + vbYesNo, "Planning Settings") Then Exit Sub 
    Select Case TestFrequency.Value 
     Case "Test Annually" 
      Year1.ListIndex = 0 
      Year2.ListIndex = 0 
      Year3.ListIndex = 0 
     Case "Test Every 2 years" 
      Year1.ListIndex = 1 
      Year2.ListIndex = 0 
      Year3.ListIndex = 1 
     Case "Test every 3 years" 
      Year1.ListIndex = 1 
      Year2.ListIndex = 1 
      Year3.ListIndex = 0 
     Case "Ad-hoc" 
      Year1.ListIndex = 1 
      Year2.ListIndex = 1 
      Year3.ListIndex = 1 
    End Select 
    If Err.Number = 0 Then MsgBox "Settings were changed.", vbInformation 
End Sub 
Смежные вопросы