Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2012, 13:53   #1
subluna
Пользователь
 
Регистрация: 08.01.2012
Сообщений: 14
По умолчанию процедура с параметром вызывает функцию

HelP! excel нужно сделать макрос на VBA. с языком знакомлюсь 2 дня. Есть срочная задача:
Дан а таблица с записями - лист1 (один из столбцов -"код"
графический объект "надпись"=значению из поля/столбца "код" - лист2
Нужно по клику на надписи вывести окно в котором отобразить данные с листа1 (строки таблицы) выбранные по условию "код".
алгоритм построила:
I процедуре передается параметр = значению" надпись"/"код"
II запускается функция перебор строк таблицы
III запускается окно (или textbox или msgbox)
IV в окно передается динамический список/таблица
V по клику ОК окно закрывается

II.I функции передается параметр "надпись"
по параметру перебираются строки с листа1 и при условии "надпись"="код" добавляются в динамический список/таблица

как это сделать!!! pls!
subluna вне форума Ответить с цитированием
Старый 08.01.2012, 14:03   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Без примера файла (с Вашими наработками) никто ничего Вам не скажет.
Архивируйте файлик и прикрепите.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 08.01.2012, 14:06   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Добавляйте строки в массив (создайте заранее пустой на максимальный размер, или можно увеличивать одномерный с помощью Redim Preserve, если будете выбирать одно значение строки).
В конце данные массива выгружаете куда угодно (можно отобрать только заполненную часть).
Выводить думаю лучше в листбокс на форму. Впрочем в листбокс можно сразу данные и отбирать, без промежуточного массива.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.01.2012, 14:28   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Hugo121, очень понравился ваш ответ
А вот работаю с Excel и VBA несколько лет, - и то с трудом понимаю, как воплотить в коде всё то, что вы написали.
Не уверен, что ТС сможет на основании вышесказанного что-то реализовать.

subluna, прочитал ваш пост дважды.
НИЧЕГО не понял.
Вы бы всё в своём файле Excel описали - глядишь, уже было бы готовое решение.

И самое главное - объясните, для чего всё это нужно.
Вдруг есть какой-то намного более простой вариант добиться желаемого...

Главное: зачем выводить записи именно в окно?
Это сложно в плане кода. Почему бы не вывести отфильтрованные записи на другой лист?
EducatedFool вне форума Ответить с цитированием
Старый 08.01.2012, 14:57   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

EducatedFool - да ну? Неужели так сложно выразился?
Поясню (для ТС) -
1. раз таблица дана, значит известно количество её строк
2. можно объявить массив нужного размера
3. перебор строк - нужное отбираем в этот массив (в переменной считаем количество отобранных строк, её же используем для заполнения массива)
4. любым способом извлекаем из массива отобранное, используя значение индексной переменной

Но проще конечно сразу копировать отобранные строки на другой лист.
А ещё проще поставить на лист фильтр
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.01.2012, 16:39   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Сделал пример для синих кнопочек:
http://excelvba.ru/XL_Files/Sample__...__18-37-20.zip

С текстбоксом (поле ввода) делается аналогично:
http://excelvba.ru/XL_Files/Sample__...__18-48-37.zip


Последний раз редактировалось EducatedFool; 08.01.2012 в 16:49.
EducatedFool вне форума Ответить с цитированием
Старый 08.01.2012, 16:52   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Игорь, пример работает криво, если на первом листе отфильтровать например ALEKSOID'а
Надо было на фильтре код и строить, или на ColumnDifferences.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 08.01.2012 в 16:55.
Hugo121 вне форума Ответить с цитированием
Старый 08.01.2012, 17:00   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Игорь, пример работает криво, если на первом листе отфильтровать например ALEKSOID'а
Не спорю.
А если поставить защиту на лист с результатом - ещё кривее будет работать.
И совсем криво, если удалить исходную таблицу

Это, так сказать, демо-версия.
Если в целом устроит - можно будет думать о доработке.
EducatedFool вне форума Ответить с цитированием
Старый 09.01.2012, 03:11   #9
subluna
Пользователь
 
Регистрация: 08.01.2012
Сообщений: 14
По умолчанию

спасибо всем за живое участие!
у меня вот что вышло:
Код:
Sub FindererALL()
Dim FD, firstAddress, adrs, OriginalRange As String
FD = InputBox("Введите искомое польз.место")
If FD = "" Then Exit Sub ' если ESC - отказ от поиска
Dim c As Range: Set c = Range("C:C").Find(FD) 'ищет, если нету ничего, то выход из макроса
If c Is Nothing Then MsgBox "Искомые данные не найдены", vbExclamation: Exit Sub
firstAddress = c.Address
c.Select
OriginalStr = ""
Do
    adrs = adrs & vbLf & c.Address(0, 0)
    n = c.Row
    OriginalRange = OriginalRange & vbLf & Range("B" & n) & " " & Range("D" & n) & " " & Range("e" & n) & " " & Range("f" & n) & " " & Range("h" & n) & " " & Range("g" & n) & " " & Range("q" & n) & " " & Range("r" & n)
    Union(Selection, c).Select
    Set c = Range("c:t").FindNext(c)
Loop While c.Address <> firstAddress
MsgBox "Значение """ & FD & """ найдено в ячейках:" & adrs, vbInformation
MsgBox "Значению """ & FD & """ соответствуют" & OriginalRange, vbInformation
End Sub
но теперь нужно не в MsgBox вывести рез-ты а в комбо наверное, типа табличка с заголовками. Бу искать, гдет видела подобное решение.
а еще не могу найти чем получитьтекстовое значение объекта "Надпись"(ёксельный объект который синенькая кнопочка)...
subluna вне форума Ответить с цитированием
Старый 09.01.2012, 03:18   #10
subluna
Пользователь
 
Регистрация: 08.01.2012
Сообщений: 14
По умолчанию

вот файл вложила
там вторая процедура есть вот в ней не могу передать из активного листа (в этом примере "Отдел-ИТ") значение надписи процедуре (
и надо наверное в listBox'е отображать результат
Вложения
Тип файла: zip 09012012 задача-решение.zip (131.5 Кб, 8 просмотров)

Последний раз редактировалось subluna; 09.01.2012 в 05:35.
subluna вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура с параметром MD1 Паскаль, Turbo Pascal, PascalABC.NET 1 29.11.2011 18:25
Процедура с параметром и без параметра admin22 Паскаль, Turbo Pascal, PascalABC.NET 2 27.09.2011 15:44
Процедура с изменяемым параметром Utkin Общие вопросы Delphi 11 30.11.2010 14:41
Процедура с параметром динамическим массивом. VintProg Общие вопросы Delphi 12 11.06.2010 13:12
Ajax - вызывает ошибку в IE kalexi JavaScript, Ajax 2 04.05.2010 17:03