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

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

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

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

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

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

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

13
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
24.08.2020, 19:33
Цитата Сообщение от Speedy_alex Посмотреть сообщение
как процедурой создать переменные с именами именно с этого столбца А, чтобы потом присвоить им значения из столбца B?
- напрямую - никак. А для чего это нужно? Возможны другие варианты (например, загружать эти данные в словарь).
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
24.08.2020, 20:06
Словарь - вполне удобный вариант. Если не МАК, хотя и для них есть способ.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4137 / 2431 / 503
Регистрация: 13.12.2016
Сообщений: 8,271
Записей в блоге: 5
24.08.2020, 21:05
Speedy_alex, может надстройка по считыванию в двумерный массив проще?
где первый элемент имя, а второй значение...
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
24.08.2020, 21:21
АЕ, а как затем пользовать? Искать имя перебором?
Кстати вместо словаря можно использовать коллекцию, смотря конечно какие данные собрались хранить в переменных.
0
0 / 0 / 0
Регистрация: 24.08.2020
Сообщений: 4
24.08.2020, 21:33  [ТС]
В том-то и дело, что перебором не хочется. Хочу красивый способ, чтобы добавлять нужные переменные на лист Настройка и сразу обращаться к ним в скрипте. Не работал раньше со словарями. А можно пример такой реализации посмотреть?

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

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

Добавлено через 1 минуту
Имел ввиду "сразу обращаться" - после перезапуска
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
24.08.2020, 21:58
Не вполне понятен смысл этого всего...
Я такие настройки использовал иногда, но я давал этим ячейкам (где значения) имена, которые и использовал в коде. Тогда если юзер что-то добавит или передвинет на листе. то это не повлияет на код.
А если использовать словарь или коллекцию - достаточно юзеру что-то поменять в первом столбце - и код уже по имени не найдёт значение из второго....
0
0 / 0 / 0
Регистрация: 24.08.2020
Сообщений: 4
24.08.2020, 22:32  [ТС]
Да-да. Вот именно это и нужно: "Я такие настройки использовал иногда, но я давал этим ячейкам (где значения) имена, которые и использовал в коде. Тогда если юзер что-то добавит или передвинет на листе. то это не повлияет на код."
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
24.08.2020, 23:16
Может что то вроде этого?
Загонять данные через цикл и потом использовать
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
25.08.2020, 00:05
Цитата Сообщение от Speedy_alex Посмотреть сообщение
Да-да. Вот именно это и нужно
- ну так и карты в руки, чем мы можем помочь то?
Берёшь и делаешь, руками-мышью.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
25.08.2020, 05:42
если юзер что-то добавит или передвинет
хм..
Ну задаст пользователь новые нужные ему переменные (имена)
И что дальше? Ему придётся и код писать где эти переменные используются
Переменные ради переменных? нигде не используемые
0
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
25.08.2020, 08:19
Юзеры новые имена создавать не умеют!
Да это и не помешает коду. Чтоб помешать - имя нужно удалить.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
25.08.2020, 13:10
Лучший ответ Сообщение было отмечено 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  [ТС]
Спасибо всем за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2020, 16:06
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru