Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/65: Рейтинг темы: голосов - 65, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 24.08.2020
Сообщений: 4
1

Динамическое имя переменной из ячейки

24.08.2020, 18:43. Показов 13305. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Подскажите пожалуйста, хочу в книге на листе "Настройка" сделать структуру: в столбце А - имена будущих переменных (а-ля "DB_OUT", "DB_IN" и т.д. в столбце B - их значение (например, текстовый путь к файлу). Не хватает тяму - как процедурой создать переменные с именами именно с этого столбца А, чтобы потом присвоить им значения из столбца B?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2020, 18:43
Ответы с готовыми решениями:

Задать имя ячейки в виде переменной в VBA
Есть пример: выделения незаполненных ячеек цветом Range(Cells(iStart, 11), Cells(n +...

Присвоить переменной имя, заданное для текущей ячейки
Добрый день! Я пока не волшебник, а только учусь... Осваиваю макросы в excel. Задача такая:...

Как получить значение ячейки, имя которой записано в переменной?
как получить значение ячейки имя которой записано в переменной

Как присвоить переменной имя ячейки ексель по которой кликнул пользователь
Здравствуйте. Известно только то что пользователь обязательно кликнет по ячейке после того как...

13
Модератор
Эксперт функциональных языков программированияЭксперт Python
37144 / 20590 / 4253
Регистрация: 12.02.2012
Сообщений: 33,951
Записей в блоге: 14
24.08.2020, 19:33 2
Цитата Сообщение от Speedy_alex Посмотреть сообщение
как процедурой создать переменные с именами именно с этого столбца А, чтобы потом присвоить им значения из столбца B?
- напрямую - никак. А для чего это нужно? Возможны другие варианты (например, загружать эти данные в словарь).
0
6930 / 2838 / 545
Регистрация: 19.10.2012
Сообщений: 8,670
24.08.2020, 20:06 3
Словарь - вполне удобный вариант. Если не МАК, хотя и для них есть способ.
0
ᴁ®
Эксперт MS Access
3813 / 2148 / 453
Регистрация: 13.12.2016
Сообщений: 7,360
Записей в блоге: 5
24.08.2020, 21:05 4
Speedy_alex, может надстройка по считыванию в двумерный массив проще?
где первый элемент имя, а второй значение...
0
6930 / 2838 / 545
Регистрация: 19.10.2012
Сообщений: 8,670
24.08.2020, 21:21 5
АЕ, а как затем пользовать? Искать имя перебором?
Кстати вместо словаря можно использовать коллекцию, смотря конечно какие данные собрались хранить в переменных.
0
0 / 0 / 0
Регистрация: 24.08.2020
Сообщений: 4
24.08.2020, 21:33  [ТС] 6
В том-то и дело, что перебором не хочется. Хочу красивый способ, чтобы добавлять нужные переменные на лист Настройка и сразу обращаться к ним в скрипте. Не работал раньше со словарями. А можно пример такой реализации посмотреть?

Добавлено через 1 минуту
Или "коллекцию". Тоже раньше не работал ))

Добавлено через 2 минуты
Данные хочу хранить - либо путь к директории для выгрузки в файл, либо какие-то мелкие параметры - цифры от 0 до 9 и т.д.

Добавлено через 1 минуту
Имел ввиду "сразу обращаться" - после перезапуска
0
6930 / 2838 / 545
Регистрация: 19.10.2012
Сообщений: 8,670
24.08.2020, 21:58 7
Не вполне понятен смысл этого всего...
Я такие настройки использовал иногда, но я давал этим ячейкам (где значения) имена, которые и использовал в коде. Тогда если юзер что-то добавит или передвинет на листе. то это не повлияет на код.
А если использовать словарь или коллекцию - достаточно юзеру что-то поменять в первом столбце - и код уже по имени не найдёт значение из второго....
0
0 / 0 / 0
Регистрация: 24.08.2020
Сообщений: 4
24.08.2020, 22:32  [ТС] 8
Да-да. Вот именно это и нужно: "Я такие настройки использовал иногда, но я давал этим ячейкам (где значения) имена, которые и использовал в коде. Тогда если юзер что-то добавит или передвинет на листе. то это не повлияет на код."
0
Часто онлайн
903 / 609 / 272
Регистрация: 09.01.2017
Сообщений: 2,012
24.08.2020, 23:16 9
Может что то вроде этого?
Загонять данные через цикл и потом использовать
Visual Basic
1
2
3
4
Sub test()
    ThisWorkbook.Names.Add "переменная", "Путь к файлу", False
    MsgBox ThisWorkbook.Names("переменная").Value
End Sub
Добавлено через 44 минуты
Или так задать имя ячейке текстом из ячейки
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub ss()
    Dim a As Object
    Dim RangeName As String
For i = 2 To 20
    Set a = Sheets("Лист1").Cells(i, 1)
         If a <> "" Then
            RangeName = a
            ActiveWorkbook.Names.Add Name:=RangeName, RefersTo:=a
         End If
Next
End Sub
1
6930 / 2838 / 545
Регистрация: 19.10.2012
Сообщений: 8,670
25.08.2020, 00:05 10
Цитата Сообщение от Speedy_alex Посмотреть сообщение
Да-да. Вот именно это и нужно
- ну так и карты в руки, чем мы можем помочь то?
Берёшь и делаешь, руками-мышью.
0
11513 / 3799 / 681
Регистрация: 13.02.2009
Сообщений: 11,217
25.08.2020, 05:42 11
если юзер что-то добавит или передвинет
хм..
Ну задаст пользователь новые нужные ему переменные (имена)
И что дальше? Ему придётся и код писать где эти переменные используются
Переменные ради переменных? нигде не используемые
0
6930 / 2838 / 545
Регистрация: 19.10.2012
Сообщений: 8,670
25.08.2020, 08:19 12
Юзеры новые имена создавать не умеют!
Да это и не помешает коду. Чтоб помешать - имя нужно удалить.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37144 / 20590 / 4253
Регистрация: 12.02.2012
Сообщений: 33,951
Записей в блоге: 14
25.08.2020, 13:10 13
Лучший ответ Сообщение было отмечено Speedy_alex как решение

Решение

На самом деле, вопрос решить можно. Через интерфейс VBE. Но, повторяю - зачем???

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub getConfig()
 
    p& = ThisWorkbook.VBProject.VBComponents("Лист1").CodeModule.ProcBodyLine("main", 0) + 1
    
    dcl_1$ = "Dim " + Range("A1").Value + " as " + Range("B1").Value
    dcl_2$ = "Dim " + Range("A2").Value + " as " + Range("B2").Value
    dcl_3$ = "Dim " + Range("A3").Value + " as " + Range("B2").Value
    
    ThisWorkbook.VBProject.VBComponents("Лист1").CodeModule.InsertLines p&, dcl_1
    ThisWorkbook.VBProject.VBComponents("Лист1").CodeModule.InsertLines p&, dcl_2
    ThisWorkbook.VBProject.VBComponents("Лист1").CodeModule.InsertLines p&, dcl_3
    
End Sub
 
Sub main()
 
    getConfig
 
End Sub
Выполните main и посмотрите, что получится И, опять-таки - зачем?
Вложения
Тип файла: zip Задачи-VBA-CL.zip (7.1 Кб, 5 просмотров)
1
0 / 0 / 0
Регистрация: 24.08.2020
Сообщений: 4
25.08.2020, 16:06  [ТС] 14
Спасибо всем за помощь!
0
25.08.2020, 16:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2020, 16:06
Помогаю со студенческими работами здесь

Динамическое имя переменной
Всем доброго дня! Можно ли название переменной задавать динамически?Т.е.: int &quot;Asd&quot; + i = 123;...

Имя переменной динамическое?
привет народ, незнаю как сформулировать, динамические переменные или х.з. как там, поэтому вопрос:...

Динамическое имя переменной
Возможно ли обратиться к переменной, имя которой заранее неизвестно? Ну, например, имеем: var...

Обратиться к переменной через динамическое имя
Здравствуйте. Извините если вопрос бредовый, но может кто слышал / знает. Есть ли в GO возможность...

Динамическое имя символьной переменной в цикле
Здраствуйте! В ходе обобщения решения одной задачи возникла необходимость в создании некоторого...

Создание переменной, имя которой включает имя другой переменной
Вот пример кода var y = 1; var x = 'p' + y; eval( 'var' + x + '= 123' );к созданной переменной...


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

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