powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как хранить список строк в vba
21 сообщений из 21, страница 1 из 1
как хранить список строк в vba
    #38833726
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня.

Народ, требуется создать переменную в которую записывать строки, какой тип переменной надо делать в VBA и как её верно объявлять? что-то вроде List , StringList, Strings
Что-то поле явы, делфи и js c VB мне так сложно работать :( 15ть лет прошло как, что-то кроме макросов писал на VB
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38833763
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто строки? Массив?
Или именованные строки - коллекцию, словарь?

D0KXпеременную в которую записывать строкину записывать строки - это все-таки не цель, правильно? Цель - их потом как-то использовать, как? от этого может зависеть ответ
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38834637
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообще у меня есть некий массив данных, который обрабатывается на наличие ошибок формата или отсутствия бд, вот мне надо некую переменную, чтобы записать туда найденные ошибки. Одна ошибка, одна текстовая строка с описанием этой ошибки. Как-то так, пока примитив :)
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38834641
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с массивом не удобно, так как изначально не известен размер, а заниматься динамическим его добавлением это уже не то, так как должно быть, что то удобнее.
Решил почитать про массивы в VB (может можно без указания размера работать) и нашел описание Коллекций, как вы и писали. Это похоже, то что мне надо. Я до этого уже пробовал объявить переменную типа List, после того как не получилось, полез в справку VBA, а там описание использования только как Свойства или метод, это и сбило с толку.
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38834644
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, вот только похоже есть небольшая проблема. Попробовал объявить как указано в примере от MS , и у меня не заработало, после заменил, что этот пример был для VS2013, у меня VBA2010, какой у заказчика сейчас сразу и не скажу, но не суть. Так вот для VS2010, для VB уже вообще нет примера, а возможно и возможности создавать эти коллекции.
Как быть? Остается только вариант с массивом
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38834703
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно уяснить, что VB(A) и VB.NET - это разные, абсолютно несовместимые языки.

В вашем случае:
Код: vbnet
1.
2.
3.
4.
Dim er As New Collection
er.Add "Плохая ошибка", "333"
er.Add "Ужасная ошибка", "666"
MsgBox er("333")
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841217
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сейчас развивая дальше тему с Коллекциями, возник вопрос по поводу ключа "Key" который можно указать добавляя запись в коллекцию.
Можно ли узнать ключ записи по номеру этой записи в коллекции?
Как то так:

Код: vbnet
1.
2.
3.
4.
Dim collection as new Colllection
Dim key as string
collection.add "text1" "text"
key = collection(1).key
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841253
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нельзя.

выход:
Код: vbnet
1.
2.
3.
4.
Public Type MyType
  Key As String
  Value As String
End Type
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841254
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D0KXМожно ли узнать ключ записи по номеру этой записи в коллекции?Номера записи у элемента коллекции нет - вернее, он не имеет смысла, поскольку не является неизменным атрибутом конкретной записи.
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841260
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaне имеет смысла, поскольку не является неизменным атрибутом конкретной записи.если записи не удалять, то является. Мало того, при добавлении в коллекцию можно указать номер позиции.
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841294
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proесли записи не удалять, то является.
Является ли номер последней записи неизменным, если мы добавляем запись перед ней?
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841375
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, сам себе напротиворечил )
Разумеется, вставка и удаление записей меняет индекс. )
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841569
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro , так о том и речь - атрибут или постоянный, или нет. Нельзя быть "немножко беременной"... Порядковый индекс - не постоянный, ибо есть условия, когда он изменяется.
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38841587
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы здесь не применить словарь? Dictionary? Там можно по ключу изменять значение Item.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim dicErr as object,s as string,ss as string
set dicErr = createobject("scripting.dictionary")
dicErr.comparemode = 1
s = "Critical Err"
ss = "111"
if dicErr.exists(s) = false then
dicErr.add s,ss
else
dicErr.item(s) = ss
end if


Примитивно и не достаточно развернуто, но в качестве примера применения вполне подойдет.
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38842266
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно просто и без проверки наличия
dicErr(s)=ss
если не было создастся, если был перезапишется

и обращаться элементарно:

Print dicErr(s)
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38842302
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
под мой вариант похоже подходит только создание нового типа.

в целом, сейчас задача у меня такая: из файла получить данные, и занести их в бд, в несколько таблиц, причем есть связанные. Данные выгружаются текстовые, так что предварительно мне надо проверить есть ли данные в связанных таблицах и выдрать их id, так вот подумал максимально использовать коллекцию, включая её ключ, в который фактически записываю или имя столбца/таблицы/"кодовое слово", а в значение результат поиска, если есть и только одна строка.

Последовательность значений в коллекции не важна

В целом почти все ок, кроме проверки невозможно проверить есть ли такой ключ в коллекции так:
Код: vbnet
1.
key = collection(1).key



ну и если просто обратиться к коллекции по несуществующему ключу, то вылетает ошибка и дальше код не идет

Код: vbnet
1.
2.
3.
4.
5.
6.
Dim collection as new Colllection
Dim text as string
Dim text1 as string
collection.add "text1" "text"
text = collection("text")         OK
text1 = collection("text1")      Error 



Отсюда еще один вопрос (хотя похоже на него ответ НЕТ): Можно ли обратиться к несуществующему ключу и получить не критичную ошибку, а что-то более менее обрабатываемое.
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38842303
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробую отлавливать ON Error'ом правда в VBA это еще тот пипец
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38842308
D0KX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то не нашел кнопку редактирования предыдущего поста, хотя вроде бы раньше такая возможность была. Ну да ладно.
не так уж и сложно на самом деле обойти эту ошибку
получилось как-то так:
Код: vbnet
1.
2.
3.
 On Error GoTo error_FIO
 fio = finde_list("ÔÈÎ")
error_FIO:



так как у меня таких записей наберется наверное не больше 10ти, то наверное обойдусь просто заранее созданными переменными, с последующим их заполнение таким способом, хотя это не тру код
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38842317
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D0KXполучилось как-то так:неправильно
обработка ошибки должна заканчиваться либо оператором Resume либо используйте On Error Resume Next
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38842594
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755dicErr(s)=ss
если не было создастся, если был перезапишетсяСогласен. Но я сторонних менее категоричных методов. И в отладке удобнее и по большей части корректнее. В данном случае не принципиально. Но в некоторых случаях необходимо не просто перезаписывать, а дополнять данные Item. У меня такие случаи встречаются чаще и поэтому я привык использовать exists. Плюс порой приходится доп.действия производить в случае наличия или отсутствия данных в словаре. Да и нагляднее и читабельнее код получается. Что впрочем на любителя.
В любом случае ни Ваш ни мой метод не является ошибочным.
...
Рейтинг: 0 / 0
как хранить список строк в vba
    #38844671
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist
Согласен. Всё зависит от конкретных условий.
Но мне очень понравилось обращение к элементу словаря именно без item
А то приходилось печатать dicErr.item(s). А так: dicErr(s) при наведении мышкой видно (при выполнении по F8)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как хранить список строк в vba
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]