Помогите создать цикл с проверкой CheckBox

Программирование на Visual Basic for Applications
SaleXuS
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 21.03.2007 (Ср) 15:23

Помогите создать цикл с проверкой CheckBox

Сообщение SaleXuS » 21.03.2007 (Ср) 15:52

Здравствуйте товарищи программисты!

Помогите,пожалуйста, создать цикл в Excel:

Есть объекты Checkbox1...Checkbox11 и процедуры Procedure1...Procedure11

Мне нужно, чтоб цикл проверял Checkbox'ы и, при выполнении условия, вызывал процедуру:

For ...
If Checkbox1= True then call Procedure1
Next


Как сделать так, чтоб при каждом шаге проверялся следующий объект и при выполнении условия вызывалась процедура? Должны меняться только номера объектов и процедур :?: [/b]

Krasnaja Shapka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 87
Зарегистрирован: 26.10.2006 (Чт) 12:13
Откуда: Киев

Сообщение Krasnaja Shapka » 21.03.2007 (Ср) 16:37

чекбоксы можно обойти с помощью Me.Controls("Checkbox" & i).Value
а что делать с процедурами я не знаю... если они одинаковые, есть вариант сделать из них одну с переменной "index"

или мутить
select case true
case Checkbox1.value
procedure1
case Checkbox2.value
procedure2
....
end select
Если ясность вашего объяснения исключает ложное толкование, все равно кто-то поймет вас неправильно.

SaleXuS
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 21.03.2007 (Ср) 15:23

Сообщение SaleXuS » 22.03.2007 (Чт) 6:05

Дело в том, что я хочу сделать код как можно меньше. Делать без цикла нереально, проверяться будут аж 18 чекбоксов, для этого лучше цикл.
Вчера кода не было у меня под рукой, сегодня принес. Выглядит так:

Sub Восст_формул01_Click() ' Кнопка

Dim Confirm1 As String
Dim i As Integer
Dim name

Confirm1 = MsgBox("Вы отметили галочками строки, в зеленых ячейках которых" & _
"будут восстановлены исходные формулы. Продолжить?", vbYesNo, "Внимание!")

If Confirm1 = vbYes Then
With Assistant.NewBalloon
For i = 1 To 18
name = "Восстан_формулы" + i
'Вызов процедуры
If .CheckBoxes(i).Checked = True Then Call name
Next i
End With
End If

End Sub



При выполнении выходит ошибка на "Call name":
Compile error: Expected Sub, Function or Property :(

Что я делаю неправильно?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 22.03.2007 (Чт) 10:21

select case true - это пять, в цитаты однозначно :)

А не прощ ли сделать 1 прцедуру для обработки, передавать ей параметр - номер выбранного checkbox, и в ней самой уже делать select case?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.03.2007 (Чт) 10:45

RayShade писал(а):select case true - это пять, в цитаты однозначно :)

Вообще-то иногда select case true бывает довольно удобен :)
Lasciate ogni speranza, voi ch'entrate.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 22.03.2007 (Чт) 11:51

alibek

Ага. Примерно в таких же случаях как и do while 1=1

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.03.2007 (Чт) 12:07

Да нет, совершено в иных :)
Часто юзаю; очень полезная конструкция.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Krasnaja Shapka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 87
Зарегистрирован: 26.10.2006 (Чт) 12:13
Откуда: Киев

Сообщение Krasnaja Shapka » 22.03.2007 (Чт) 13:38

RayShade писал(а):select case true - это пять, в цитаты однозначно :)

а можно более конструктивно, что вам не нравится в такой конструкции?
Если ясность вашего объяснения исключает ложное толкование, все равно кто-то поймет вас неправильно.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 22.03.2007 (Чт) 15:47

RayShade писал(а):alibek
Ага. Примерно в таких же случаях как и do while 1=1


Ну, если быть точным, то иногда действительно бывает удобно сделать что-то вроде:

Код: Выделить всё
Do
    ...
    Select Case ...
         Case ...
         Case ...
         Case Else: Exit Do
    End Select
    ...
Loop
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 23.03.2007 (Пт) 23:36

RayShade писал(а):alibek
Ага. Примерно в таких же случаях как и do while 1=1


пример:

Код: Выделить всё
Function TestFunction(a As Variant)
    Select Case True
    Case IsArray(a): MsgBox "Array"
    Case a Like "*test*": MsgBox "Contains ""text"""
    Case Else: MsgBox "Other"
    End Select
End Function

Sub test()
    TestFunction Array(1, 3, 4)
    TestFunction "contest"
    TestFunction True
End Sub
Привет,
KL

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 23.03.2007 (Пт) 23:47

SaleXuS писал(а):Дело в том, что я хочу сделать код как можно меньше. Делать без цикла нереально, проверяться будут аж 18 чекбоксов, для этого лучше цикл.
Вчера кода не было у меня под рукой, сегодня принес. Выглядит так:

Sub Восст_формул01_Click() ' Кнопка

Dim Confirm1 As String
Dim i As Integer
Dim name

Confirm1 = MsgBox("Вы отметили галочками строки, в зеленых ячейках которых" & _
"будут восстановлены исходные формулы. Продолжить?", vbYesNo, "Внимание!")

If Confirm1 = vbYes Then
With Assistant.NewBalloon
For i = 1 To 18
name = "Восстан_формулы" + i
'Вызов процедуры
If .CheckBoxes(i).Checked = True Then Call name
Next i
End With
End If

End Sub



При выполнении выходит ошибка на "Call name":
Compile error: Expected Sub, Function or Property :(

Что я делаю неправильно?


Call на Run пробовал заменить?
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 1

    TopList