Доброго всем вечера! Хочу еще раз всех поблагодарить за помощь, за критику и т.д. Все практически готово. И форма как хотел и программка именно то что и задумывал. Остались некоторые нюансы. Хочу сразу предупредить, что удалил из файла все бланки (отпускной, командировка и т.д.), так же удалил все данные с листа "Данные" все из-за размера, никак файл не хотел влазить в размер 100Кб. Суть вопроса в следующем: есть листы: "База данных(отпуск)","База данных(командировка)" и "База данных(ведомость)" ( в дальнейшем будут ещё листы). Необходимо сделать так, чтобы при наборе фамилии в форме и нажатии на кнопку "Найти" выдавалось окно (пример на рисунке) с данными на человека где и когда он был в отпуске, командировке и т.д.
Проблему попытался решить следующим образом: создал лист "Поиск данных" (в последующем будет скрыт от посторонних глаз, если он вообще понадобиться), а потом выводить данные из ячеек этого листа в MsgBox. Но запутался в циклах. Всю процедуру поиска и вывода попытался сделать в Sub поиск(). Прошу Вас помочь, может быть можно все решить намного проще. Помогите пожалуйста.
Доброго всем вечера! Хочу еще раз всех поблагодарить за помощь, за критику и т.д. Все практически готово. И форма как хотел и программка именно то что и задумывал. Остались некоторые нюансы. Хочу сразу предупредить, что удалил из файла все бланки (отпускной, командировка и т.д.), так же удалил все данные с листа "Данные" все из-за размера, никак файл не хотел влазить в размер 100Кб. Суть вопроса в следующем: есть листы: "База данных(отпуск)","База данных(командировка)" и "База данных(ведомость)" ( в дальнейшем будут ещё листы). Необходимо сделать так, чтобы при наборе фамилии в форме и нажатии на кнопку "Найти" выдавалось окно (пример на рисунке) с данными на человека где и когда он был в отпуске, командировке и т.д.
Проблему попытался решить следующим образом: создал лист "Поиск данных" (в последующем будет скрыт от посторонних глаз, если он вообще понадобиться), а потом выводить данные из ячеек этого листа в MsgBox. Но запутался в циклах. Всю процедуру поиска и вывода попытался сделать в Sub поиск(). Прошу Вас помочь, может быть можно все решить намного проще. Помогите пожалуйста.sos-13
Все сделал, всем огромное спасибо. Есть маленькие недочеты, если не трудно подскажите. Как определить последнюю заполненную ячейку, именно заполненную. Лучше объясню на примере, есть много строк: Например: N п/п . . . 546 547 Пустая ячейка 549 550 и т.д. Необходимо определить номер пустой ячейки, т.е. 548-ой Конструкция sheets.cells(rows.count,1).end(xlup).row определяет 550-ю ячейку, мне необходимо, чтобы определило 548-ю. Подскажите пожалуйста.
Все сделал, всем огромное спасибо. Есть маленькие недочеты, если не трудно подскажите. Как определить последнюю заполненную ячейку, именно заполненную. Лучше объясню на примере, есть много строк: Например: N п/п . . . 546 547 Пустая ячейка 549 550 и т.д. Необходимо определить номер пустой ячейки, т.е. 548-ой Конструкция sheets.cells(rows.count,1).end(xlup).row определяет 550-ю ячейку, мне необходимо, чтобы определило 548-ю. Подскажите пожалуйста.sos-13
Матраскин, а не подскажете как именно написать для моего случая: N=Sheets("база данных").cells(rows.count, "a").end(xlup).row. "а" это столбец А с номерами по порядку, N -переменная которой присваиваю порядковый номер. Как именно будет выглядеть запись?
Матраскин, а не подскажете как именно написать для моего случая: N=Sheets("база данных").cells(rows.count, "a").end(xlup).row. "а" это столбец А с номерами по порядку, N -переменная которой присваиваю порядковый номер. Как именно будет выглядеть запись?sos-13
Не совсем так, после пустой ячейки может быть еще много ячеек заполненных, т.е. Нужно определить не ту, которая выше последней заполненной, а именно ту ячейку которая в общем списке пустая. Объясню на примере: есть допустим 600 строк заполненных с данными, и допустим я убрал (не удалил строку!) из строки 548 все данные, т.е. Осталась просто пустая строка. Вот мне и необходимо узнать номер этой строки.
Не совсем так, после пустой ячейки может быть еще много ячеек заполненных, т.е. Нужно определить не ту, которая выше последней заполненной, а именно ту ячейку которая в общем списке пустая. Объясню на примере: есть допустим 600 строк заполненных с данными, и допустим я убрал (не удалил строку!) из строки 548 все данные, т.е. Осталась просто пустая строка. Вот мне и необходимо узнать номер этой строки.sos-13
_Boroda_, если не сложно то можно "на пальцах" расписать что сия конструкция означает: Sheets("база данных").Cells(Rows.Count, "a").End(xlUp).End(xlUp).Row - 1 1) Sheets("база данных") - это я понимаю, это лист "база данных" 2) Cells(Rows.Count, "a") - это ячейка (Rows.Count - не понимаю) столбика "а" ну и т.д. если не сложно конечно.
_Boroda_, если не сложно то можно "на пальцах" расписать что сия конструкция означает: Sheets("база данных").Cells(Rows.Count, "a").End(xlUp).End(xlUp).Row - 1 1) Sheets("база данных") - это я понимаю, это лист "база данных" 2) Cells(Rows.Count, "a") - это ячейка (Rows.Count - не понимаю) столбика "а" ну и т.д. если не сложно конечно.sos-13
Sheets("база данных").Cells(Rows.Count, "a").End(xlUp).End(xlUp).Row - 1 0. Лист - понятно; 1. Rows.Count - количество строк на листе (1 048 576 в Excel старше 2003-го); 2. Cells(Rows.Count, "a") - ячейка А1048576; 3. Cells(Rows.Count, "a").End(xlUp - от п.2 прыгаем наверх до первой заполненной ячейки (как если бы нажали Контрл Стрелка_вверх); 4. Cells(Rows.Count, "a").End(xlUp).End(xlUp) - от п.3 еще раз как бы жмем Контрл Стрелка_вверх - попадаем в ячейку, которая перед самой нижней непустой (ко всему этому .Row - получаем номер строки этой ячейки) 5. вычитаем 1 - попадаем в последнюю пустую, которая выше последней непустой. Косяк (пока писал, понял) - если последняя заполненная А150, а последняя незаполненная А149 (предыдущая ), то такой метод не прокатит.
придумал, как поизвращаться [vba]
Код
N = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks)(Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Count).Row
[/vba]Все это в одну строку, тут просто не помещается Или в 2 строки[vba]
1. Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) - мы только что выше писали объяснялку - получаем все ячейки от А1 до Апоследняя_заполненная 2. добавив к п.1 .SpecialCells(xlCellTypeBlanks), получаем из массива п.1 только пустые ячейки Это мы сейчас говорим про кусок Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks), 3. а кусок Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Count дает нам количество пустых ячеек из п.2 Если короче и по-русски, то получается Range(п.2)(п.3).Row - из кучи пустых ячеек мы выбираем ту, у которой самый большой порядковый номер (он равен количеству этих пустых ячеек - например Selection(5) - это пятая по счету ячейка из выделенных; Range("A1:A10)(7) - это А7) и присваиваем переменной N значение номера строки этой найденной ячейки.
Sheets("база данных").Cells(Rows.Count, "a").End(xlUp).End(xlUp).Row - 1 0. Лист - понятно; 1. Rows.Count - количество строк на листе (1 048 576 в Excel старше 2003-го); 2. Cells(Rows.Count, "a") - ячейка А1048576; 3. Cells(Rows.Count, "a").End(xlUp - от п.2 прыгаем наверх до первой заполненной ячейки (как если бы нажали Контрл Стрелка_вверх); 4. Cells(Rows.Count, "a").End(xlUp).End(xlUp) - от п.3 еще раз как бы жмем Контрл Стрелка_вверх - попадаем в ячейку, которая перед самой нижней непустой (ко всему этому .Row - получаем номер строки этой ячейки) 5. вычитаем 1 - попадаем в последнюю пустую, которая выше последней непустой. Косяк (пока писал, понял) - если последняя заполненная А150, а последняя незаполненная А149 (предыдущая ), то такой метод не прокатит.
придумал, как поизвращаться [vba]
Код
N = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks)(Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Count).Row
[/vba]Все это в одну строку, тут просто не помещается Или в 2 строки[vba]
1. Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) - мы только что выше писали объяснялку - получаем все ячейки от А1 до Апоследняя_заполненная 2. добавив к п.1 .SpecialCells(xlCellTypeBlanks), получаем из массива п.1 только пустые ячейки Это мы сейчас говорим про кусок Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks), 3. а кусок Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Count дает нам количество пустых ячеек из п.2 Если короче и по-русски, то получается Range(п.2)(п.3).Row - из кучи пустых ячеек мы выбираем ту, у которой самый большой порядковый номер (он равен количеству этих пустых ячеек - например Selection(5) - это пятая по счету ячейка из выделенных; Range("A1:A10)(7) - это А7) и присваиваем переменной N значение номера строки этой найденной ячейки._Boroda_