Вывод отчета в Excel
Модератор: Naeel Maqsudov
-
- Сообщения: 31
- Зарегистрирован: 28 мар 2014, 13:17
Имеет 2 кнопки .Отчет по должникам и отчет по месяцу. Проблема такова. У меня 12 листов на них имеются данные
И так. Пользователь нажимает на кнопку чтобы создать отчет. Выбирает из списка Исполнителя и Месяц. Выбирает все то что ему необходима. Значит программа должна просмотреть все 12 листов и смотрит месяц и исполнителя и смотри какие столбца заполнены а какие пусты в таблице и выводит на новый лист с такими же столбцами [ATTACH]1963[/ATTACH] [ATTACH]1964[/ATTACH]
И так. Пользователь нажимает на кнопку чтобы создать отчет. Выбирает из списка Исполнителя и Месяц. Выбирает все то что ему необходима. Значит программа должна просмотреть все 12 листов и смотрит месяц и исполнителя и смотри какие столбца заполнены а какие пусты в таблице и выводит на новый лист с такими же столбцами [ATTACH]1963[/ATTACH] [ATTACH]1964[/ATTACH]
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:

-
- Сообщения: 31
- Зарегистрирован: 28 мар 2014, 13:17
незнаю как сделать всю это дребедень. надо написать прогу на каждый объект?
Очевидно, что можно перебрать в цикле все 12-ть необходимых рабочих листов и, например, отфильтровать (автофильтр/расширенный фильтр) необходимую информацию. Разумеется, что после фильтрации, можно скопировать полученную информацию в другой лист (в т.ч. и новый)
-
- Сообщения: 31
- Зарегистрирован: 28 мар 2014, 13:17
Private Sub CommandButton1_Click()
Set wsh = Worksheets.Add
wsh.Name = UserForm3.ComboBox1 & ":" & UserForm3.ComboBox2
With Worksheets(UserForm3.ComboBox2)
.Rows(1).Copy Cells(1, 1): r2 = 2
For r1 = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(r1, 10) = UserForm3.ComboBox1 Then .Rows(r1).Copy Cells(r2, 1): r2 = r2 + 1
Next
End With
End Sub
что я не так делаю.вылазивает ошибка и создается пустой лист
Set wsh = Worksheets.Add
wsh.Name = UserForm3.ComboBox1 & ":" & UserForm3.ComboBox2
With Worksheets(UserForm3.ComboBox2)
.Rows(1).Copy Cells(1, 1): r2 = 2
For r1 = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(r1, 10) = UserForm3.ComboBox1 Then .Rows(r1).Copy Cells(r2, 1): r2 = r2 + 1
Next
End With
End Sub
что я не так делаю.вылазивает ошибка и создается пустой лист
Не может сначала вылазить ошибка, а затем создаваться новый рабочий лист, т.к. должно быть всё наоборот, сначала новый лист, а при попытке присвоения ему нового имени - ошибка, ибо имя листа не должно содержать ":"Настя Белова писал(а):что я не так делаю.вылазивает ошибка и создается пустой лист
А вообще, если 12-ть рабочих листов соответствуют 12-и месяцам, то непонятно зачем Вы сначала говорите о поиске данных во всех 12-и листах, а затем, в примере осуществляете перебор ячеек только в одном листе ...
-
- Сообщения: 31
- Зарегистрирован: 28 мар 2014, 13:17
ну заменила я ":" на "_". создается новый лист с названием другим(март_архипов). и вылазивает ошибка.
-
- Сообщения: 31
- Зарегистрирован: 28 мар 2014, 13:17
индексу в Worksheets нужно передавать либо индекс, либо имя листа. а как?
Если создаётся имя март_архипов, то стало быть ComboBox1 - содержит имена месяцев, а ComboBox2 - фамилии, и если поиск должен осуществляться в листе-месяце, то, как минимум :
и наоборот
Код: Выделить всё
With Worksheets(UserForm3.ComboBox1)
Код: Выделить всё
If .Cells(r1, 10) = UserForm3.ComboBox2 ...
-
- Сообщения: 31
- Зарегистрирован: 28 мар 2014, 13:17
копирует шапку,но не все данные