|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
Всем доброго дня. Народ, требуется создать переменную в которую записывать строки, какой тип переменной надо делать в VBA и как её верно объявлять? что-то вроде List , StringList, Strings Что-то поле явы, делфи и js c VB мне так сложно работать :( 15ть лет прошло как, что-то кроме макросов писал на VB ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2014, 07:34 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
Просто строки? Массив? Или именованные строки - коллекцию, словарь? D0KXпеременную в которую записывать строкину записывать строки - это все-таки не цель, правильно? Цель - их потом как-то использовать, как? от этого может зависеть ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2014, 08:55 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
вообще у меня есть некий массив данных, который обрабатывается на наличие ошибок формата или отсутствия бд, вот мне надо некую переменную, чтобы записать туда найденные ошибки. Одна ошибка, одна текстовая строка с описанием этой ошибки. Как-то так, пока примитив :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2014, 04:08 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
с массивом не удобно, так как изначально не известен размер, а заниматься динамическим его добавлением это уже не то, так как должно быть, что то удобнее. Решил почитать про массивы в VB (может можно без указания размера работать) и нашел описание Коллекций, как вы и писали. Это похоже, то что мне надо. Я до этого уже пробовал объявить переменную типа List, после того как не получилось, полез в справку VBA, а там описание использования только как Свойства или метод, это и сбило с толку. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2014, 04:26 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
да, вот только похоже есть небольшая проблема. Попробовал объявить как указано в примере от MS , и у меня не заработало, после заменил, что этот пример был для VS2013, у меня VBA2010, какой у заказчика сейчас сразу и не скажу, но не суть. Так вот для VS2010, для VB уже вообще нет примера, а возможно и возможности создавать эти коллекции. Как быть? Остается только вариант с массивом ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2014, 04:57 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
Нужно уяснить, что VB(A) и VB.NET - это разные, абсолютно несовместимые языки. В вашем случае: Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2014, 08:56 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
сейчас развивая дальше тему с Коллекциями, возник вопрос по поводу ключа "Key" который можно указать добавляя запись в коллекцию. Можно ли узнать ключ записи по номеру этой записи в коллекции? Как то так: Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 07:21 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
нельзя. выход: Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 08:55 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
D0KXМожно ли узнать ключ записи по номеру этой записи в коллекции?Номера записи у элемента коллекции нет - вернее, он не имеет смысла, поскольку не является неизменным атрибутом конкретной записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 08:55 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
Akinaне имеет смысла, поскольку не является неизменным атрибутом конкретной записи.если записи не удалять, то является. Мало того, при добавлении в коллекцию можно указать номер позиции. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 09:04 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
Shocker.Proесли записи не удалять, то является. Является ли номер последней записи неизменным, если мы добавляем запись перед ней? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 09:49 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
Ну да, сам себе напротиворечил ) Разумеется, вставка и удаление записей меняет индекс. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 10:43 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
Shocker.Pro , так о том и речь - атрибут или постоянный, или нет. Нельзя быть "немножко беременной"... Порядковый индекс - не постоянный, ибо есть условия, когда он изменяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 12:39 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
А почему бы здесь не применить словарь? Dictionary? Там можно по ключу изменять значение Item. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Примитивно и не достаточно развернуто, но в качестве примера применения вполне подойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2014, 12:47 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
А можно просто и без проверки наличия dicErr(s)=ss если не было создастся, если был перезапишется и обращаться элементарно: Print dicErr(s) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 01:58 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
под мой вариант похоже подходит только создание нового типа. в целом, сейчас задача у меня такая: из файла получить данные, и занести их в бд, в несколько таблиц, причем есть связанные. Данные выгружаются текстовые, так что предварительно мне надо проверить есть ли данные в связанных таблицах и выдрать их id, так вот подумал максимально использовать коллекцию, включая её ключ, в который фактически записываю или имя столбца/таблицы/"кодовое слово", а в значение результат поиска, если есть и только одна строка. Последовательность значений в коллекции не важна В целом почти все ок, кроме проверки невозможно проверить есть ли такой ключ в коллекции так: Код: vbnet 1.
ну и если просто обратиться к коллекции по несуществующему ключу, то вылетает ошибка и дальше код не идет Код: vbnet 1. 2. 3. 4. 5. 6.
Отсюда еще один вопрос (хотя похоже на него ответ НЕТ): Можно ли обратиться к несуществующему ключу и получить не критичную ошибку, а что-то более менее обрабатываемое. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 07:56 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
попробую отлавливать ON Error'ом правда в VBA это еще тот пипец ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 07:59 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
что-то не нашел кнопку редактирования предыдущего поста, хотя вроде бы раньше такая возможность была. Ну да ладно. не так уж и сложно на самом деле обойти эту ошибку получилось как-то так: Код: vbnet 1. 2. 3.
так как у меня таких записей наберется наверное не больше 10ти, то наверное обойдусь просто заранее созданными переменными, с последующим их заполнение таким способом, хотя это не тру код ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 08:19 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
D0KXполучилось как-то так:неправильно обработка ошибки должна заканчиваться либо оператором Resume либо используйте On Error Resume Next ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 08:44 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
alex77755dicErr(s)=ss если не было создастся, если был перезапишетсяСогласен. Но я сторонних менее категоричных методов. И в отладке удобнее и по большей части корректнее. В данном случае не принципиально. Но в некоторых случаях необходимо не просто перезаписывать, а дополнять данные Item. У меня такие случаи встречаются чаще и поэтому я привык использовать exists. Плюс порой приходится доп.действия производить в случае наличия или отсутствия данных в словаре. Да и нагляднее и читабельнее код получается. Что впрочем на любителя. В любом случае ни Ваш ни мой метод не является ошибочным. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 12:03 |
|
как хранить список строк в vba
|
|||
---|---|---|---|
#18+
The_Prist Согласен. Всё зависит от конкретных условий. Но мне очень понравилось обращение к элементу словаря именно без item А то приходилось печатать dicErr.item(s). А так: dicErr(s) при наведении мышкой видно (при выполнении по F8) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2014, 02:33 |
|
|
start [/forum/topic.php?fid=60&fpage=36&tid=2156078]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 297ms |
total: | 438ms |
0 / 0 |