Страницы: 1
RSS
Передача списка ListBox в процедуру
 
Добрый день всем!
На форме размещены 10 списков по два столбца в каждом (имена у всех уникальные, так уж получилось).
С каждым списком возможны типичные манипуляции, т.е. заполнение их типичными данными. Например 4 разных набора данных. Проще всего конечно рядом с каждым списком прикрутить 4 кнопки, но захламится форма и код вырастет многократно.
Хочу написать процедуру, которая бы работала с каждым списком, т.е. по сути мне нужно в процедуру передать имя списка, чтобы с ним можно было работать дальше (наполнять типичными данными). Можно ли это сделать и как? Спасибо

Сделал
Код
vnesti_nabor (nomer2_vsego)'  Ругается "Object required..."
...
Sub vnesti_nabor(nomer As ListBox)
...
End Sub
Изменено: DRONAN - 10.07.2019 14:23:54
 
а в чем проблема с процедуры обратиться по имени к элементу формы?
 
А не проще при вызове формы сразу наполнить эти 4 набора данных нужными значениями и уж их использовать в нужное время в нужном месте?
Согласие есть продукт при полном непротивлении сторон
 
Если честно, не понял взаимосвязи между моим вопросом и Вашим ответом. Представьте себе 10 цехов (это списки на форме), в которые каждый день нужно отправлять заказы. Есть типичные (постоянные) заказы. Мы размещаем на форме 4 дополнительные кнопки, а не 40. Нажали кнопку "1" - список заказов заполнился сразу определенным набором данных. Процедура, которую хочу написать, будет получать из основного кода имя списка, который в настоящее время активен (выделен) и дальше все понятно. Я выше написал как я это делаю, но выскакивает ошибка, т.к. при вызове процедуры список еще не заполнен, поэтому null, возникает ошибка
 
Код
Sub List_()
     Call vnesti_nabor(ListBox1.List)
End Sub

Sub vnesti_nabor(arrX())
     ...
End Sub

передаем списк ListBox, далее работаем с ним как с массивом
 
Цитата
DRONAN написал: Если честно, не понял взаимосвязи между моим вопросом и Вашим ответом
Если это относительно моего ответа, то я вообще, пока нет конкретного файла-пример (Как есть - Как надо), все вопросы расцениваю как чисто теоретические. И ответы даю соответствующие
Согласие есть продукт при полном непротивлении сторон
 
vikttur
попробовал, не получилось: Compile error: Type mismatch: array or ...expected
 
А я не пробовал, на коленке написал...
Пример где?!
 
Цитата
vikttur написал: Пример где?!
Виктор, так вот же
Цитата
DRONAN написал: Представьте себе 10 цехов...
:D  
Согласие есть продукт при полном непротивлении сторон
 
Я представил, а макрос все равно не работает.
 
Ок, поясню. Работать должно так: на форме помимо других элементов размещены 4 кнопки, отвечающие за передачу из одного списка в другой определенных наборов.
Как я уже писал, таких блоков, как на скрине 10 штук. Выделяем определенный список, допустим nomer2_1 (или nomer2_vsego), нажимаем кнопку "1" - список nomer2_vsego заполнился набором №1, нажимаем кнопку "2" - заполнился набором №2 и т.д. Так вот мне нужно для написания процедуры на нажатие кнопок 1...4 передать имя списка, который в данный момент выделен так, чтобы с ним можно было работать. Т.е. выделен список nomer2_1 - заполнился список nomer2_vsego, выделен nomer3_1 - заполнился список nomer3_vsego и т.д.
 
 
Код
With UserForm1
    .nomer2_vsego.List = .nomer2_1.List
End With
Согласие есть продукт при полном непротивлении сторон
 
не то.
я делаю так
Код
Private Sub nabor2_1_Click() ' нажатие кнопки "1"
CommandButton2_Click
Call vnesti_nabor(nomer2_vsego.List)    ' [B][I]здесь ошибка "Object required..."[/I][/B]
End Sub

Sub vnesti_nabor(nomer As ListBox)
nomer.AddItem 0    
nomer.List(0, 0) = "Саморез"
nomer.List(0, 1) = 1

nomer2_vsego.AddItem 1
nomer2_vsego.List(1, 0) = "Винт"
nomer2_vsego.List(1, 1) = 1
End Sub
Пробовал как писал vikttur, возникает ошибка Compile error: Type mismatch: array or ...expected
в строке Call vnesti_nabor(nomer2_vsego.List)
Изменено: DRONAN - 11.07.2019 16:03:06
 
Цитата
DRONAN написал: не то.
я делаю так
'Не то' - это Ваш пример, который более уместен на форуме по фотошоп.
Что и как Вы там где-то у себя делаете нам не ведомо
Согласие есть продукт при полном непротивлении сторон
 
DRONAN, Вы файл пример выложите, а не картинки, по ним как то не сподручно вникать.
"Все гениальное просто, а все простое гениально!!!"
 
спасибо vikttur, единственный кто более менее вник в суть
Цитата
vikttur написал: передаем списк ListBox, далее работаем с ним как с массивом
Это не помогло конечно, нашел решение на другом сайте. Если интересно кому, то правильно так передавать ListBox в качестве аргумента процедуры
Код
Call vnesti_nabor(nomer2_vsego) ' вызов процедуры заполнения списка
...
Sub vnesti_nabor(ByRef nOmer As MSForms.ListBox) 'правильная передача аргумента
    nOmer.AddItem 0
    nOmer.List(0, 0) = "..."
...
End Sub
 
Сложно вникнуть в суть по картинкам, а вот на счет передачи списка из ListBox, с помощью массива проблем никогда не возникало.
А рисовать пример в Excel мне лично лень. Как написано у одного пользователя, кому нужно решение проблемы, тот и пример рисует.
Тут форум по Excel, а не по фотографиям из Excel.
"Все гениальное просто, а все простое гениально!!!"
 
DRONAN, в следующий раз:
- вчитывайтесь, что Вам пишут;
- прикладывайте нормальный пример в Excel, а не картинки;
- показывайте ссылки а параллельное размещение темы на других форумах;
- сами форматируйте код в сообщениях с помощью кнпки <...>
Страницы: 1
Наверх