Страницы: 1 2 След.
RSS
Элементы именнованного массива констант из VBA
 
Подскажите, а можно обратиться из VBA к конкретным элементам именнованного массива констант?  
Как это сделать?
 
А что такое "именнованный массив" ?
 
Как к элементу массива? :О)  
Если массив М() содержит константы, то М(2) вернет 3 элемент (по умолчанию в массиве отсчет с 0)
 
Создается имя (например "ДНИ"), где вместо диапозона указывается массив, например,    
={"пн";"вт";"ср";"чт";"пт";"сб"}  
К каждому элементу в Эксель можно обратиться, например, через функцию ИНДЕКС.    
Вопрос заключается в том, а можно ли обратиться к указанным элементам через VBA?
 
попробуйте написать формат записи в VBA?
 
Я обычно пишу так:  
 
ДНИ = Split("пн вт ср чт пт сб")  
 
Получается массив с первым индексом 0, т.е.  
ДНИ(0) = "пн"  
ДНИ(1) = "вт"  
и т.д.
 
Народ, вы не поняли: создавать массивы в VBA и использовать их (в том числе обращаться к элементам массива) проблем нет!  
Проблема как обращаться из VBA к элементам и работать с элементами массива созданного в Excel?
 
Может так?  
 
Sub tt()  
Dim a  
a = [ДНИ]
MsgBox a(1)  
End Sub
 
Уважаемый Hugo, все здорово работает и как надо!  
Только я не понял, что это за обращение в квадратных скобках, никогда в литературе по вба не встречал!  
Все так просто, аж не вериться!
 
А может еще можно вносить из vba элементы в именнованный диапозон excel&
 
А я литературу не читал :)
 
{quote}{login=asdom}{date=10.10.2011 07:23}{thema=Re: }{post}А может еще можно вносить из vba элементы в именнованный диапозон excel&{/post}{/quote}  
[ДНИ].Item(3) = "asd"
Я сам - дурнее всякого примера! ...
 
Как-то грубо, но работает.  
Сам принцип может быть такой:  
 
 
Sub tt()  
Dim a  
a = [ДНИ]
MsgBox a(1)  
ReDim Preserve a(UBound(a))  
a(UBound(a)) = "пятница"  
ActiveWorkbook.Names.Add Name:="ДНИ", RefersToR1C1:=a  
End Sub  
 
Как править именно в имени - не нашёл.
 
А Сергей уже... Я про Итем не подумал...  
Теперь этого должно хватить на все случаи :)
 
Хм.. Сергей, не работает... Почему?
 
Стоп, работает, извиняюсь.  
"в именнованный диапозон" работает.  
А в "={"пн";"вт";"ср";"чт";"пт";"сб"}" - не работает.
 
См.
Я сам - дурнее всякого примера! ...
 
Игорь, для ВБА "={"пн";"вт";"ср";"чт";"пт";"сб"}" - это строка а не массив. И работать с ней надо соответственно.
Я сам - дурнее всякого примера! ...
 
[ДНИ].Item(3) = "asd" прекрасно работает, если ДНИ это именнованный диапозон!
Если ДНИ это именнованный маасив констант, то не работает! Что жалко, поскольку очень простой способ добавления бы был?
 
Не, погоди...  
См. файл
 
Это я Сергею отвечал :)  
А в файле как раз показано добавление.
 
А можно сделать так, чтобы в квадратных скобках была переменная (скажем типа String), которая в случае необходимости принимала бы различные значения, в том числе ДНИ (как в нашем примере)?
 
Не совсем в тему, но раз уж про константы заговорили...  
 
Enum MyConst  
Ania = 1  
Bania = 2  
Cania = 3  
End Enum  
 
Sub io()  
Dim x As MyConst  
x = Ania  
MsgBox x  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Это что-то вроде словаря получается...  
По поводу править - так в моём примере и можно править.  
Перебирайте массив а, или конкретное значение меняйте на что угодно, потом пишите его назад в имя.  
Кстати, так вполне можно что-то своё хранить в именах, особенно если это имя сделать скрытым. И никакого скрытого листа не нужно.
 
Игорь, я как раз написал(отвлекли):  
Public Sub www()  
   Dim a  
   a = [Дни]
   a(2) = "kjg"  
   Application.Names.Add Name:="Дни", RefersTo:=a  
   MsgBox Application.Index([Дни], 2)
End Sub
Я сам - дурнее всякого примера! ...
 
Как менять туда и извлекать обратно, это уже благодаря вас стало понятно, спасибо!  
 
Не работает вот что:  
st = "ДНИ"  
a = [st]
 
обращение к a(1) в этом случае уже выдает ошибку!  
Хочется чтобы мобильно меняя имя именнованного диапозона можно было бы мобильно обращаться к элементам данного именнованного диапозона!
 
т.е в идеале хочется заполучить следующую функцию:  
Fun(mas As String, i As Integer)  
 
mas имя именнованного диапозона, созданного в Эксель (а не в вба)  
i - порядковый элемент этого диапозона
 
пардон, не диапозона, а массива констант...
 
а что там должно работать?  
st="ДНИ" это присвоение переменной st значения текстовой строки ДНИ  
а=[st] попытка обратиться к диапазону st (а он существует?)
 
>>Как менять туда и извлекать обратно, это уже благодаря вас стало понятно, спасибо!  
Кстати, если уже что-то меняете, то это не константы : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
Страницы: 1 2 След.
Читают тему
Наверх