Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объяснить ВБА что String - имя переменной - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объяснить ВБА что String - имя переменной (Макросы/Sub)
Объяснить ВБА что String - имя переменной
Roman777 Дата: Среда, 25.02.2015, 14:59 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Добрый день!
Я ниже привёл отрывок кода своего макроса, который будет обращаться к нескольким файлам (книгам эксель)
У меня возникла проблемка на этапе определения переменных Nm1-Nm6:

[vba]
Код
Dim i, i1, i2, Ni, Nj, t As Long
  Dim j As Long, n As Long
  Dim sheet As Worksheet
  Dim Nazvanie As String
  Dim Nm1, Nm2, Nm3, Nm4, Nm5, Nm6, Nm7, Nm8  As String
  Dim NewWB As Workbook
  Dim Nmn As Variant
  pathNWB = ThisWorkbook.Path & "\"

Nm1 = pathNWB & "ABB" & "\" & "ABB.xlsx"
Nm2 = pathNWB & "DKC" & "\" & "DKC.xls"
Nm3 = pathNWB & "EKF" & "\" & "EKF.xlsx"
Nm4 = pathNWB & "IEK" & "\" & "IEK.xlsx"
Nm5 = pathNWB & "Legrand" & "\" & "Legrand.xls"
Nm6 = pathNWB & "SE_DEKraft" & "\" & "SE_DEKraft.xlsm"

For n = 1 To 6

Nmn = "Nm" & n
MsgBox (Nmn)
[/vba]
Как можно подсказать ВБА что Nmn это не текст, образованный от соединения выражения "Nm" и текущего значения переменной "n", а именно имя переменной, которое образуется таким способом.
Чтобы для примера MsgBox (Nmn) выдавал текущий путь к файлу (а не Nm1-Nm6).


Много чего не знаю!!!!
 
Ответить
СообщениеДобрый день!
Я ниже привёл отрывок кода своего макроса, который будет обращаться к нескольким файлам (книгам эксель)
У меня возникла проблемка на этапе определения переменных Nm1-Nm6:

[vba]
Код
Dim i, i1, i2, Ni, Nj, t As Long
  Dim j As Long, n As Long
  Dim sheet As Worksheet
  Dim Nazvanie As String
  Dim Nm1, Nm2, Nm3, Nm4, Nm5, Nm6, Nm7, Nm8  As String
  Dim NewWB As Workbook
  Dim Nmn As Variant
  pathNWB = ThisWorkbook.Path & "\"

Nm1 = pathNWB & "ABB" & "\" & "ABB.xlsx"
Nm2 = pathNWB & "DKC" & "\" & "DKC.xls"
Nm3 = pathNWB & "EKF" & "\" & "EKF.xlsx"
Nm4 = pathNWB & "IEK" & "\" & "IEK.xlsx"
Nm5 = pathNWB & "Legrand" & "\" & "Legrand.xls"
Nm6 = pathNWB & "SE_DEKraft" & "\" & "SE_DEKraft.xlsm"

For n = 1 To 6

Nmn = "Nm" & n
MsgBox (Nmn)
[/vba]
Как можно подсказать ВБА что Nmn это не текст, образованный от соединения выражения "Nm" и текущего значения переменной "n", а именно имя переменной, которое образуется таким способом.
Чтобы для примера MsgBox (Nmn) выдавал текущий путь к файлу (а не Nm1-Nm6).

Автор - Roman777
Дата добавления - 25.02.2015 в 14:59
Gustav Дата: Среда, 25.02.2015, 15:25 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Вместо
[vba]
Код
Dim Nm1, Nm2, Nm3, Nm4, Nm5, Nm6, Nm7, Nm8  As String
[/vba]массив объявите
[vba]
Код
Dim Nm(8) as String
[/vba]
и будет вам счастье. И дальше:
[vba]
Код
Nm(1) = pathNWB & "ABB" & "\" & "ABB.xlsx"
Nm(2) = pathNWB & "DKC" & "\" & "DKC.xls"
Nm(3) = pathNWB & "EKF" & "\" & "EKF.xlsx"
Nm(4) = pathNWB & "IEK" & "\" & "IEK.xlsx"
Nm(5) = pathNWB & "Legrand" & "\" & "Legrand.xls"
Nm(6) = pathNWB & "SE_DEKraft" & "\" & "SE_DEKraft.xlsm"
For n = 1 To 6
     MsgBox Nm(n)
Next
[/vba]
Сравните со своим кодом, почувствуйте разницу.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Среда, 25.02.2015, 15:29
 
Ответить
СообщениеВместо
[vba]
Код
Dim Nm1, Nm2, Nm3, Nm4, Nm5, Nm6, Nm7, Nm8  As String
[/vba]массив объявите
[vba]
Код
Dim Nm(8) as String
[/vba]
и будет вам счастье. И дальше:
[vba]
Код
Nm(1) = pathNWB & "ABB" & "\" & "ABB.xlsx"
Nm(2) = pathNWB & "DKC" & "\" & "DKC.xls"
Nm(3) = pathNWB & "EKF" & "\" & "EKF.xlsx"
Nm(4) = pathNWB & "IEK" & "\" & "IEK.xlsx"
Nm(5) = pathNWB & "Legrand" & "\" & "Legrand.xls"
Nm(6) = pathNWB & "SE_DEKraft" & "\" & "SE_DEKraft.xlsm"
For n = 1 To 6
     MsgBox Nm(n)
Next
[/vba]
Сравните со своим кодом, почувствуйте разницу.

Автор - Gustav
Дата добавления - 25.02.2015 в 15:25
Roman777 Дата: Среда, 25.02.2015, 15:36 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Gustav, Спасибо большое.
Но, видимо, я что-то не так дальше делаю, ибо проблема та же, он мне выдаёт MsgBox (Nmn) последовательно имена: Nm1-Nm6. А я хочу получить значения переменных под данными именами. (т.е. путь к каждому файлику - pathNWB & "ABB" & "\" & "ABB.xlsx" и т.д.).


Много чего не знаю!!!!
 
Ответить
СообщениеGustav, Спасибо большое.
Но, видимо, я что-то не так дальше делаю, ибо проблема та же, он мне выдаёт MsgBox (Nmn) последовательно имена: Nm1-Nm6. А я хочу получить значения переменных под данными именами. (т.е. путь к каждому файлику - pathNWB & "ABB" & "\" & "ABB.xlsx" и т.д.).

Автор - Roman777
Дата добавления - 25.02.2015 в 15:36
Hugo Дата: Среда, 25.02.2015, 15:50 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
К переменным так обращаться нельзя!
Вы случайно не elzka? Сегодня уже отвечал на аналогичный вопрос таким кодом:
[vba]
Код
Sub tt()
     Dim A1, A2, A3, arr, i&
     A1 = 10
     A2 = 15
     A3 = 35
     arr = Array(A1, A2, A3)
     For i = 0 To 2
         MsgBox arr(i)
     Next
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Среда, 25.02.2015, 15:51
 
Ответить
СообщениеК переменным так обращаться нельзя!
Вы случайно не elzka? Сегодня уже отвечал на аналогичный вопрос таким кодом:
[vba]
Код
Sub tt()
     Dim A1, A2, A3, arr, i&
     A1 = 10
     A2 = 15
     A3 = 35
     arr = Array(A1, A2, A3)
     For i = 0 To 2
         MsgBox arr(i)
     Next
End Sub
[/vba]

Автор - Hugo
Дата добавления - 25.02.2015 в 15:50
Gustav Дата: Среда, 25.02.2015, 15:50 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Так замените свой фрагмент:
[vba]
Код
For n = 1 To 6
Nmn = "Nm" & n
MsgBox (Nmn)
[/vba]на мой
[vba]
Код
For n = 1 To 6
     MsgBox Nm(n)
Next
[/vba]
Я же всё написал выше.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеТак замените свой фрагмент:
[vba]
Код
For n = 1 To 6
Nmn = "Nm" & n
MsgBox (Nmn)
[/vba]на мой
[vba]
Код
For n = 1 To 6
     MsgBox Nm(n)
Next
[/vba]
Я же всё написал выше.

Автор - Gustav
Дата добавления - 25.02.2015 в 15:50
Roman777 Дата: Среда, 25.02.2015, 16:50 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Gustav, вы правы, спасибо).
Hugo, Нет не elzka. Ваш способ наиболее грамотный, но в силу моей безграмотности, менее прозрачный. Тоже над запомнить. Спасибо


Много чего не знаю!!!!
 
Ответить
СообщениеGustav, вы правы, спасибо).
Hugo, Нет не elzka. Ваш способ наиболее грамотный, но в силу моей безграмотности, менее прозрачный. Тоже над запомнить. Спасибо

Автор - Roman777
Дата добавления - 25.02.2015 в 16:50
Hugo Дата: Среда, 25.02.2015, 17:36 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Думаю наиболее грамотно вместо кучи однотипных (по смыслу) переменных (хоть в массиве, хоть россыпью) использовать одну переменную-массив данных - как у Gustav'a


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Среда, 25.02.2015, 17:38
 
Ответить
СообщениеДумаю наиболее грамотно вместо кучи однотипных (по смыслу) переменных (хоть в массиве, хоть россыпью) использовать одну переменную-массив данных - как у Gustav'a

Автор - Hugo
Дата добавления - 25.02.2015 в 17:36
Roman777 Дата: Среда, 25.02.2015, 17:44 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Согласен. О таком способе не знал. А вот с массивами уже сталкивался 1 раз, но вот что-то не догадался. Вы просветили, за что благодарствую.


Много чего не знаю!!!!
 
Ответить
СообщениеСогласен. О таком способе не знал. А вот с массивами уже сталкивался 1 раз, но вот что-то не догадался. Вы просветили, за что благодарствую.

Автор - Roman777
Дата добавления - 25.02.2015 в 17:44
Hugo Дата: Среда, 25.02.2015, 17:55 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Только там не ошибитесь с первым индексом массива - используйте в отладке окно Locals.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеТолько там не ошибитесь с первым индексом массива - используйте в отладке окно Locals.

Автор - Hugo
Дата добавления - 25.02.2015 в 17:55
Roman777 Дата: Среда, 25.02.2015, 18:08 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Hugo, Никогда не пользовался этим окном, оно даже скрыто было))). Спасибо, над будет посмотреть что с ним можно делать...)


Много чего не знаю!!!!
 
Ответить
СообщениеHugo, Никогда не пользовался этим окном, оно даже скрыто было))). Спасибо, над будет посмотреть что с ним можно делать...)

Автор - Roman777
Дата добавления - 25.02.2015 в 18:08
Hugo Дата: Среда, 25.02.2015, 18:40 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Думаю оно только для информации, и можно оттуда скопировать некоторое содержимое. Но посмотреть что где в массивах - очень помогает. С словарями правда только ключи видны, и кажется только первые 255...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДумаю оно только для информации, и можно оттуда скопировать некоторое содержимое. Но посмотреть что где в массивах - очень помогает. С словарями правда только ключи видны, и кажется только первые 255...

Автор - Hugo
Дата добавления - 25.02.2015 в 18:40
Wasilich Дата: Суббота, 28.02.2015, 09:06 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Gustav, Hugo, я думаю не помешает на будущее пояснить человеку, что в строке
[vba]
Код
Dim Nm1, Nm2, Nm3, Nm4, Nm5, Nm6, Nm7, Nm8  As String
[/vba] тип переменной "As String" присваивается только переменной Nm8, остальным же, автоматически присваивается "As Variant". Поэтому необходимо тип указывать для каждой переменной.
Ну а, тип "As String" я заменяю значком $, так быстрее. :)
[vba]
Код
Dim Nm1$, Nm2$, Nm3$, Nm4$, Nm5$, Nm6$, Nm7$, Nm8$
[/vba]Хотя, может это и не правильно.


Сообщение отредактировал Wasilic - Суббота, 28.02.2015, 09:17
 
Ответить
СообщениеGustav, Hugo, я думаю не помешает на будущее пояснить человеку, что в строке
[vba]
Код
Dim Nm1, Nm2, Nm3, Nm4, Nm5, Nm6, Nm7, Nm8  As String
[/vba] тип переменной "As String" присваивается только переменной Nm8, остальным же, автоматически присваивается "As Variant". Поэтому необходимо тип указывать для каждой переменной.
Ну а, тип "As String" я заменяю значком $, так быстрее. :)
[vba]
Код
Dim Nm1$, Nm2$, Nm3$, Nm4$, Nm5$, Nm6$, Nm7$, Nm8$
[/vba]Хотя, может это и не правильно.

Автор - Wasilich
Дата добавления - 28.02.2015 в 09:06
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объяснить ВБА что String - имя переменной (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!