Checkbox в цикле excel

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Я за помощью. Не откажите :)  
На форме более 20 CheckBox. Порядок (ТabIndex) установлен.  
Пытаюсь перебрать в цикле — если установлена «галочка», в массив занести Caption:  

     j = 1  
   For Each x In Me.Controls  
       If TypeOf x Is MSForms.CheckBox Then  
           If x.Value Then  
               ArrHeader(1, j) = x.Caption  
               j = j + 1  
           End If  
       End If  
   Next x  

  Массив формируется, потом выгружается на лист.  
Проблема: в цикле CheckBox перебираются, но как? На лист надписи выгружаются не по порядку ТabIndex. Обнаружить алгоритм не удалось: не по ТabIndex, не по именам, не по алфавиту Caption, не по расположению на Frame’ах…  
Возможно, порядок создания CheckBox на форме (не знаю этого порядка, создавал не я)? Но они же переименованы и теперь имеют свои имена, а не CheckBox1, CheckBox2…  

  Что еще может служить указателем для последовательности перебора в массиве?  
Если прямого ответа нет, буду рисовать новую форму для экспериментов.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

обычно циклы For Each используются там, где порядок элементов неважен.  
т.е. нужно перебрать либо все элементы, либо найти любой, удовлетворяющий условию, либо есть уверенность, что то, что ищем в коллекции — находится там в одном экземпляре…  

  пока не понял — почему порядок важен в данном примере?

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Примерчик бы (лениво делать…)  
Может перебать их от i до конца и брать в таблицу по значению tabindex (нет примера…)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Значит ли это, что данный цикл работает неведомо как и нет метода заставить его перебирать правильно?  
Вот анархист… А я больше часа читаю-пробую…  
Пока не проверил — обычный For/Next будет послушным?  

  Порядок важен — нужно формировать шапку таблицы.  

  Примера нет, так как — нет :)  
Важно было понять причину, дальше сам… Если не справлюсь,  пример будет :)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Вить, как раз по имени и стоит в твоем случае перебирать. for … next. А для for each порядок не важен:)

Я сам — дурнее всякого примера! …

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

примерно так:  

  j = 1  
For Each x In Me.Controls  
If TypeOf x Is MSForms.CheckBox Then  
If x.Value Then  
ArrHeader(1, j) = x.Caption  
ArrHeader(2, j) = x.TabIndex  
j = j + 1  
End If  
End If  
Next x  

  with [a1].resize(2,j)
 .value=ArrHeader  
 .sort Key1:=Range(«A2»), Order1:=xlAscending, Header:=xlGuess, _  
       OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _  
       DataOption1:=xlSortNormal  
 .rows(2).clearcontents  
end with  

  конечно, если вторая строка под шапкой хотя бы временно свободна.  
иначе — сортировать массив в коде.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Спасибо всем, пока достаточно.  
Понравилась идея: для сортировки занести в массив TabIndex. Важно разместить надписи в шапке по порядку следования «галочек».  
Буду пробовать.

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Я что-то такое сообразил — для 20 штук можно и так:  

  Private Sub CommandButton1_Click()  
   For i = 0 To Me.Controls.Count — 1  
       For Each x In Me.Controls  
           If x.TabIndex = i Then  
               If TypeOf Me.Controls(i) Is MSForms.CheckBox Then  
                   MsgBox x.Caption  
               End If  
           End If  
       Next  
   Next  
End Sub

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Забыл строчку назад скорректировать, нужно лучше  
If TypeOf x Is MSForms.CheckBox Then  
хотя почему-то работает и    
Me.Controls(i)    
С нуля что-ли считаются… :)  

  -=5555=-

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

в общем случае нет гарантии, что на форме есть только чекбоксы, поэтому диапазон значений TabIndex может не совпадать с кол-вом чекбоксов. :)

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

ikki, мой вариант другие пропускает.  
Т.е. если индекс 2 и это чекбокс — то выводит. Если нет, то идём дальше.  
У меня ведь в моём примере ещё и кнопка запуска всего безобразия есть :)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Все-все-все, спасибо-спасибо-спасибо :)  
Главное понял — то, что цикл For Each сам себе на уме.  

  Игорь, последний макрос работает, нужно только подрихтовать или код, или форму(CheckBox на нескольких рамках). Наверное, второе.  
Может, по совету Сергея, сработаю на For/Next.  
Саша, разберусь, чекбоксы можно по порядку выставить.  
Дима, за OptionButton не знал (на форме их нет), в копилку знаний положил.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

Игорь, для 20-30 элементов — нормально.  
но вообще-то цикл в цикле — расточительно :)

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

{quote}{login=vikttur}{date=03.11.2012 04:33}{thema=}{post}Все-все-все{/post}{/quote}  

  эх… :(

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Ну так я написал, что на 20 можно. :)  
Если больше — сложить все одним циклом в массив с названиями и табами (отобрать естественно только что нужно), по табам отсортировать, вывести куда нужно.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

я в подобных случаях использую обычный листбокс с мультиселектом и галочками.  
может, и в Вашем случае подойдёт?

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

{quote}{login=ikki}{date=03.11.2012 04:51}{thema=пс.}{post}…обычный листбокс с мультиселектом и галочками…{/post}{/quote}  
Тоже вариант.

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

>502 Bad Gateway  
нет слов, одни эмоции  

  >Проблема: в цикле CheckBox перебираются, но как?  
в порядке создания (насколько помню)  

  >Чисто для инфо: под тип MSForms.CheckBox так же попадает и OptionButton  
варианты:  
If TypeName(x) = «CheckBox» Then  
If TypeOf x Is MSForms.CheckBox And Not TypeOf x Is MSForms.OptionButton Then

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

ikki, спасибо за пинок в нужную сторону.  
Обычный листбокс с мультиселектом и даже без галочек — и места меньше, и писанины.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#20

06.11.2012 00:10:39

если что — я не виноватый — я не сам это придумал.    
подсмотрел где-то :)

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

ValentynaK

3 / 3 / 1

Регистрация: 21.11.2012

Сообщений: 31

1

Перебор чекбоксов

30.05.2013, 17:45. Показов 5722. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте! Подскажите, кто знает. Есть ли возможность в цикле перебирать CheckBox-ы (17 штук)? Я попробовала следующий код, но он не проходит.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 Dim chk As String
   Dim pr As Boolean
   pr = False
   chk = "CheckBox"
   i = 4
   Do While Range("B" & i) <> ""
    If Range("B" & i) = ComboBox1.Text Then
       k = 7
       For j = 1 To 17
          chk = chk & j 'формирую нужный чекбокс
          If chk.Value = True Then ' Эту конструкцию не понимает
            Selection.Cells(i, 2).Select
            ActiveCell.EntireRow.Insert shift:=xlDown
            Range("B" & i).Value = Worksheets("Стирка").Range("H" & j + k) 'программа
            Range("A" & i).Value = Worksheets("Стирка").Range("J" & j + k) 'номер программы
            Range("F" & i).Value = Worksheets("Стирка").Range("I" & j + k + 1) 'себестоимость за цикл
            Range("H" & i).Value = Worksheets("Стирка").Range("J" & j + k + 1) 'загрузка
          End If
          k = k + 1
          chk = "CheckBox"
       Next
    pr = True
    End If
    i = i + 1
   Loop

Спасибо.



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

30.05.2013, 18:09

2

ValentynaK, у вас флажки находятся на Excel-листе или на VBA-форме?



0



toiai

3217 / 966 / 223

Регистрация: 29.05.2010

Сообщений: 2,085

30.05.2013, 20:16

3

Замени 11 строку кода на:

Visual Basic
1
2
3
    If UserForm1.Controls("CheckBox" & j).Value = True Then
    ' или
    If Лист1.Controls("CheckBox" & j).Value = True Then



2



3 / 3 / 1

Регистрация: 21.11.2012

Сообщений: 31

31.05.2013, 09:42

 [ТС]

4

Спасибо за помощь. Воспользовалась подсказкой toiai.



0



I have a user form in Excel VBA with a check box for each month.

Selecting one or more cause the required month to be shown on the sheet, I copy-pasted the code 12 times and it works but I’m sure there is a better way doing it with a For loop.

This is a part of my code (it goes on 12 times):

    If CheckBox1.Value = True Then
        ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("1").Visible = True
    Else
       ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("1").Visible = False
    End If

    If CheckBox2.Value = True Then
        ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("2").Visible = True
    Else
       ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems("2").Visible = False
    End If

I tried writing:

for i in range 1 to 12

and then writing my code but there seem to be a problem when I put «i» instead of the numbers.

Mike Woodhouse's user avatar

asked Aug 1, 2013 at 7:22

user1040563's user avatar

Assuming you aren’t using Tristate checkboxes, then the .Value can only be True or False, so we should be able to get away with something like this:

(Assumes your code runs inside the UserForm, so that Controls is directly accessible)

Dim mthIdx as Long
Dim nm as String
Dim c As Control

With ActiveSheet.PivotTables("PivotTable1").PivotFields("month")
    For mthIdx = 1 To 12
        nm = "CheckBox" & mthIdx
        Set c = Controls(nm)
        .PivotItems(mthIdx).Visible = c.Value
    Next
End With

(The With clause isn’t strictly necessary, but it’s usually a good idea to resolve nested COM references as infrequently as possible)

answered Aug 1, 2013 at 8:25

Mike Woodhouse's user avatar

Mike WoodhouseMike Woodhouse

51.5k12 gold badges88 silver badges127 bronze badges

Try this ..

Dim i As Integer
Dim sN As String
Dim chx As MSForms.CheckBox
Dim obj As OLEObject

For i = 1 to 12
    sN = format(i) 
    Set obj = OLEObjects("CheckBox" & sN)
    Set chx = obj.Object

    If chx.Value = True Then
        ActiveSheet.PivotTables("PivotTable" & sN).PivotFields("month").PivotItems(sN).Visible = True
    Else
       ActiveSheet.PivotTables("PivotTable" & sN).PivotFields("month").PivotItems(sN).Visible = False
    End If
Next

answered Aug 1, 2013 at 7:30

matzone's user avatar

matzonematzone

5,6933 gold badges17 silver badges20 bronze badges

2

I’ve not checked the code but this should put you along thr right path if it’s not spot on though…

For i = 1 to 12
    If CheckBox(i).Value = True Then
        ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems(i).Visible = True
    Else
       ActiveSheet.PivotTables("PivotTable1").PivotFields("month").PivotItems(i).Visible = False
    End If
Next i

answered Aug 1, 2013 at 7:30

Palendrone's user avatar

PalendronePalendrone

3541 gold badge2 silver badges13 bronze badges

1

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    Как перебрать все CheckBox’ы на листе??
    , ???

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    27.01.10, 05:49

      Суть проблемы такова:

      На листе имеется порядка 70 записей, напротив каждой стоит CheckBox1, CheckBox2,…. и т.д.

      Требуется создать Кнопку «Отметить все» то есть Все CheckBox.Value = True

      CheckBox1.Value = True
      CheckBox2.Value = True
      …..
      CheckBox69.Value = True
      CheckBox70.Value = True

      Так все дело работает.

      А можно ли сделать это грубо говоря так ???

      for i=1 to 70
      CheckBox(i).Value = true
      Next

      Monster

      Akina



      Сообщ.
      #2

      ,
      27.01.10, 05:52

        ExpandedWrap disabled

          for i=1 to 70

            Controls(«CheckBox» & CStr(i)).Value = true

          Next


        calam4uk



        Сообщ.
        #3

        ,
        27.01.10, 05:59

          Цитата Akina @ 27.01.10, 05:52

          ExpandedWrap disabled

            for i=1 to 70

              Controls(«CheckBox» & CStr(i)).Value = true

            Next

          ругается на Controls «Sub or Function not defined»
          Может объявить что то надо???

          Monster

          Akina



          Сообщ.
          #4

          ,
          27.01.10, 06:06

            Ну напиши Me.Controls


            calam4uk



            Сообщ.
            #5

            ,
            27.01.10, 06:34

              Цитата Akina @ 27.01.10, 06:06

              Ну напиши Me.Controls

              Все равно ругается «Method or data member not found»

              Monster

              Akina



              Сообщ.
              #6

              ,
              27.01.10, 06:47

                Зазипуй файл и приложи к сообщению


                calam4uk



                Сообщ.
                #7

                ,
                27.01.10, 06:53

                  Цитата Akina @ 27.01.10, 06:47

                  Зазипуй файл и приложи к сообщению

                  Вот!

                  Прикреплённый файлПрикреплённый файлОбщая.zip (82.97 Кбайт, скачиваний: 233)

                  Monster

                  Akina



                  Сообщ.
                  #8

                  ,
                  27.01.10, 07:26

                    ExpandedWrap disabled

                      Dim CheckBoxName As String

                      Dim CheckBoxObject As Variant

                      For i = 1 To 70

                          CheckBoxName = «CheckBox» & CStr(i)

                          Set CheckBoxObject = Me.Evaluate(CheckBoxName)

                          CheckBoxObject.Object.Value = True

                      Next


                    calam4uk



                    Сообщ.
                    #9

                    ,
                    27.01.10, 07:44

                      Респект и уважуха ))))
                      Я два дня голову ломаю
                      Синтаксис ё-маё
                      :victory:

                      Все получилось ))

                      Сообщение отредактировано: calam4uk — 27.01.10, 07:44

                      Monster

                      Akina



                      Сообщ.
                      #10

                      ,
                      27.01.10, 08:00

                        Цитата calam4uk @ 27.01.10, 07:44

                        Синтаксис ё-маё

                        Я расписАл в три строки, чтобы было понятно, как всё происходит. Но можно собрать всё это в одну строку и не использовать промежуточных переменных.


                        calam4uk



                        Сообщ.
                        #11

                        ,
                        27.01.10, 09:52

                          Цитата Akina @ 27.01.10, 08:00

                          Цитата calam4uk @ 27.01.10, 07:44

                          Синтаксис ё-маё

                          Я расписАл в три строки, чтобы было понятно, как всё происходит. Но можно собрать всё это в одну строку и не использовать промежуточных переменных.

                          Да это я понял!!!
                          Спасибо)))


                          Dmitrii



                          Сообщ.
                          #12

                          ,
                          28.01.10, 07:16

                            calam4uk, вот Вам ещё один вариант:

                            ExpandedWrap disabled

                              Option Compare Text

                              Dim objControl As Control

                              For Each objControl In Me.Controls

                                  If TypeName(objControl) = «CheckBox» Then

                                      objControl.Value = False

                                  End If

                              Next

                            Кстати, учтите, что при установке значения «коробочки» произойдёт вызов соответствующего обработчика события Click.

                            Сообщение отредактировано: Dmitrii — 28.01.10, 07:17

                            Monster

                            Akina



                            Сообщ.
                            #13

                            ,
                            28.01.10, 07:38

                              Dmitrii, посмотри его файл. Контролы — не на форме, так что не сработает.


                              Dmitrii



                              Сообщ.
                              #14

                              ,
                              28.01.10, 12:56

                                Цитата Akina @ 28.01.10, 07:38

                                Контролы — не на форме…

                                Тогда так:

                                ExpandedWrap disabled

                                  Option Compare Text

                                  Dim objControl As OLEObject

                                  For Each objControl In Me.OLEObjects

                                      If Left(objControl.Name, 8) = «CheckBox» Then

                                          Me.Shapes(objControl.Name).OLEFormat.Object.Object.Value = False

                                      End If

                                  Next

                                Код надо разместить в модуле листа, «контролы» которого обрабатываются.

                                calam4uk, если вдруг захотите использовать «коробочки» из панели «Формы», а не из панели «Элементы управления», то обращение к ним можно организовать так:

                                ExpandedWrap disabled

                                  Sub Example()

                                  For i = 1 To ActiveSheet.CheckBoxes.Count

                                      ActiveSheet.CheckBoxes(i).Value = False

                                  Next

                                  End Sub

                                Сообщение отредактировано: Dmitrii — 28.01.10, 13:17

                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                0 пользователей:

                                • Предыдущая тема
                                • VB for Application
                                • Следующая тема

                                Рейтинг@Mail.ru

                                [ Script execution time: 0,0364 ]   [ 16 queries used ]   [ Generated: 13.04.23, 21:13 GMT ]  

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

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

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

                                Помогите,пожалуйста, создать цикл в 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
                                • ICQ

                                Сообщение 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
                                • Сайт
                                • ICQ

                                Сообщение 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
                                • Сайт
                                • ICQ

                                Сообщение 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

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

                                Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

                                Понравилась статья? Поделить с друзьями:
                              • Checkbox в excel элемент управления
                              • Child say first word
                              • Child name one word
                              • Checkbox word что это
                              • Checkbox vba excel примеры