Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
1

Как назначить значения переменным, в цикле

28.11.2016, 08:41. Показов 5830. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется куча однотипных логических переменных. В процедуре этим переменным присваиваются true/false, из таблицы. Как автоматизировать данный процесс, чтобы при этом сохранилась возможность обращаться к этим переменным по имени, а не таким образом - arr(35) (в случае использования массива)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2016, 08:41
Ответы с готовыми решениями:

Как присвоить значения однотипным переменным в цикле?
Здравствуйте! В коде есть 14 переменных: Vopros1 , Vorpos2 ... Vopros14 Дальше хочу сделать...

Как присвоить значения переменным, взяв значения из другого файла
Добрый день. Имеется файл 1.php с содержимым всего из трех чисел через запятую 1721,17116,1703...

Назначить свойство картинки в цикле
Есть 20 Image, как в цикле применить свойство Image.Visible := False, (к примеру) картинкам 10 -...

Как назначить объекту 'Поле со списком' в MS Word значения из листа?
Не подскажет ли кто-нибудь как назначить объекту 'Поле со списком' в MS Word значения из листа...

12
Заблокирован
28.11.2016, 09:06 2
sana555, а зачем?
Массивы для того и задуманы - облегчать работу с кучей однотипных переменных.
1
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
28.11.2016, 09:16  [ТС] 3
Вот много переменных:
Visual Basic
1
2
3
4
5
Public Переменная01 As Boolean
Public Переменная02 As Boolean
Public Переменная03 As Boolean
Public Переменная04 As Boolean
.... и т.д.
Идет присвоение значений
Visual Basic
1
2
3
4
5
6
7
Public Sub НазначитьПраваДоступа1()
Переменная01 = DLookup("[Переменная01]", "UserAccess", "[КодДоступа] =" & Forms![Вход]![Логин].Column(9))
Переменная02 = DLookup("[Переменная02]", "UserAccess", "[КодДоступа] =" & Forms![Вход]![Логин].Column(9))
Переменная03 = DLookup("[Переменная03]", "UserAccess", "[КодДоступа] =" & Forms![Вход]![Логин].Column(9))
Переменная04 = DLookup("[Переменная04]", "UserAccess", "[КодДоступа] =" & Forms![Вход]![Логин].Column(9))
.... и т.д.
End Sub
Далее в каждой отдельной процедуре идет обращение к конкретной переменной:
Visual Basic
1
2
3
4
5
6
7
8
Sub XMLПроцедура1(control As IRibbonControl, ByRef enabled)
    enabled =Переменная01
End Sub
 
Sub XMLПроцедура2(control As IRibbonControl, ByRef enabled)
    enabled =Переменная02
End Sub
.... и т.д.
Откуда мне знать что Переменная01 = arr(0)
Visual Basic
1
enabled =arr(0)
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
28.11.2016, 09:38 4
И чем тут не подходит Public Переменная(1 To 100) As Boolean?
1
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
28.11.2016, 09:48  [ТС] 5
Цитата Сообщение от Hugo121 Посмотреть сообщение
И чем тут не подходит public Переменная()?
, да она то подходит, просто в процессе работы, в свою базу добавляю новые кнопки, поэтому во всех местах нужно добавлять новые переменные и присвоение делать, плюс в отдельной процедуре назначить еще для всех false (и еще их много до 50шт.). А еще, как удобно, в новую базу пришел (с другими кнопками), немножко подправил и готово. Собственно, все это для автоматизации..
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
28.11.2016, 09:58 6
Так сделайте массив с запасом в пару тысяч и забудьте про добавление переменных.
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
28.11.2016, 10:00 7
Цитата Сообщение от sana555 Посмотреть сообщение
Visual Basic
1
2
3
Sub XMLПроцедура1(control As IRibbonControl, ByRef enabled) 
enabled =Переменная01
 End Sub
У Вас на каждый элемент ленты по такой процедуре так и останется?
0
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
28.11.2016, 10:03  [ТС] 8
Цитата Сообщение от SoftIce Посмотреть сообщение
У Вас на каждый элемент ленты по такой процедуре так и останется?
Да.
Цитата Сообщение от Hugo121 Посмотреть сообщение
Так сделайте массив с запасом в пару тысяч и забудьте про добавление переменных.
В том то и загвоздка... Я не знаю как обратиться к конкретному элементу массива...
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
28.11.2016, 10:17 9
Попробуйте так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Const countN As Integer = 100 'размер массива задаем в одном месте
Public Переменная(1 To countN) As Boolean
 
Public Sub НазначитьПраваДоступа1()
    Dim i As Integer
    For i = 1 To countN
      Переменная(i) = DLookup("[Переменная" & i & "]", "UserAccess", "[КодДоступа] =" & Forms![Вход]![Логин].Column(9))
    Next i
End Sub
 
Sub XMLПроцедура1(control As IRibbonControl, ByRef enabled)
    enabled = Переменная(1)
End Sub
 
Sub XMLПроцедура2(control As IRibbonControl, ByRef enabled)
    enabled = Переменная(2)
End Sub
Добавлено через 3 минуты
Цитата Сообщение от sana555 Посмотреть сообщение
плюс в отдельной процедуре назначить еще для всех fals
Visual Basic
1
2
3
4
5
6
Public Sub sanaFalse()
    Dim i As Integer
    For i = 1 To countN
      Переменная(i) = False
    Next i
End Sub
1
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
28.11.2016, 10:27  [ТС] 10
Да, спасибо, ваш вариант рабочий, но... Я виноват, что не написал сразу, что все переменные у меня разные по имени..
У меня логика сейчас такая, имена кнопок равняются именам переменным:
Visual Basic
1
2
3
4
5
6
7
Sub XMLНовоеПоступление(control As IRibbonControl, ByRef enabled)
    enabled =НовоеПоступление
End Sub
 
Sub XMLПоступления(control As IRibbonControl, ByRef enabled)
    enabled =Поступления
End Sub
После чего я присваиваю имена полей таблицы такими же именами: НовоеПоступление, Поступления
Далее объявляю переменные:
Visual Basic
1
2
Public НовоеПоступление As Boolean
Public Поступления As Boolean
Ну и, соответственно, присваиваю им значения...
Просто, как мне кажется, я быстрее понимаю какой именно кнопке идет присвоение, а то поди ка разберись что там за кнопка под именем Переменная56...
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
28.11.2016, 10:57 11
Цитата Сообщение от sana555 Посмотреть сообщение
что там за кнопка под именем Переменная56
А так
Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Переменная() As Boolean, i As Integer
 
Public Sub НазначитьПраваДоступа1()
    Dim s
    s = Array("Поступления", "Новое поступление", "Старое поступление")
    ReDim Переменная(1 To UBound(s) + 1)
    For i = 1 To UBound(Переменная)
      Переменная(i) = DLookup(s(i - 1), "UserAccess", "[КодДоступа] =" & Forms![Вход]![Логин].Column(9))
    Next i
End Sub
1
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
28.11.2016, 11:17  [ТС] 12
Получается в данном случае в процедуре, как не крути нужно обращаться к Переменная(1)?
Visual Basic
1
2
3
Sub XMLНовоеПоступление(control As IRibbonControl, ByRef enabled)
    enabled =Переменная(1)
End Sub
п.с. Я тоже до этого копал в этом направлении, мой вариант не правильный?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Public Arr, i
Arr = Array("НовоеПоступление", "Поступления", "НоваяРеализация", "Реализации", "ПоискРеализации", "НовыйПоставщик", _
                "Поставщики", "НовыйКлиент", "Клиенты", "КлиентыПокупки", "ДеньРождения", "Продавцы", _
                "ПродавцыПродажи", "МоиПродажи", "Расходы", "СтатистикаПродаж", "ExitAccess", "СменаПользователя", _
                "СменаПароля", "НовыйПользователь", "Пользователи", "НовыйСотрудник", "Сотрудники", "Зарплата", _
                "Справочники", "GroupСлужебные", "ПанельАдмина", "Szhatie", "VisualBasic")
 
For i = 0 To UBound(Arr)    'Цикл по массиву имен
    Arr(i) = DLookup(Arr(i), "UserAccess", "[КодДоступа] =" & Forms![Вход]![Логин].Column(9))
    Debug.Print i, Arr(i)
Next
0
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
30.11.2016, 14:03  [ТС] 13
Цитата Сообщение от SoftIce Посмотреть сообщение
Попробуйте так
Поэкспериментировав, все же выбрал именно этот первый вариант, он более надежен: имя переменной соответствует имени поля таблицы, поскольку если удалить(либо поменять местами имена в массиве имен), то переменная будет соответствовать уже другому полю в таблице.
Благо есть поле описание в таблице, где делаю пометку для чего данная переменная. Ленту создаю в Ribbon XML Editor, где Id нужного элемента ленты, присваиваю имя соответствующей переменной (что в свою очередь исключает появление дублей в xml), плюс есть возможность скопировать готовый код с комментами, в которых как раз и есть нужная переменная.. Так что спасибо..

Visual Basic
1
2
3
4
5
6
7
8
9
'Acces1 (компонент: button, атрибут: onAction), 2010/2013/2016
Sub XMLНовоеПоступление(control As IRibbonControl)
    DoCmd.OpenForm "НовоеПоступление"
End Sub
 
'Acces1 (компонент: button, атрибут: getEnabled), 2010/2013/2016
Sub XMLНовоеПоступление1(control As IRibbonControl, ByRef enabled)
    enabled = Acces(1)
End Sub
0
30.11.2016, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2016, 14:03
Помогаю со студенческими работами здесь

Назначить обработчик событий на кнопки в цикле foreach
Такой простой вопрос. Есть Аж целых 12 Toggle Button. Я их свел в массив и хочу добавить обработчик...

Как применить значения цикла к остальным переменным?
Не могу понять как применить изменившиеся значения цикла ко всем переменным. Есть ли для этого...

Как присваивать значения переменным из xml файла?
Есть xml файл, необходимо, чтобы при вводе переменной равной id кабинета, присваивалось значение из...

Как задать значения переменным до выполнения функции?
Как задать значения переменным $av, $aq до выполнения функции? <?php $av=17; $aq=1; function...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru