Добрый вечер! Помогите одолеть очередную трудность, а именно: в книге имеются лист "База", на котором хранятся данные, лист "Отбор", на котором временно размещаются отобранные данные для печати и лист "Напечатанные", на котором хранятся уникальные коды ранее напечатанных данных. Также имеется форма, на форме ListBox, который заполняется повторяющимися данными после фильтрации (кодами). А проблема в том, что после выбора нужного кода в ListBox и нажатии кнопки <Выполнить>, данные на лист "Отбор" с листа "База" должны попадать только после проверки по листу "Напечатанные": если уникального кода выбранной записи нет на листе "Напечатанные", она добавляется на лист "Отбор", если есть - не добавляется. То, что я изобразил, добавляет данные на лист в любом случае: есть он на листе "Напечатанные" или нет их там. Файл прилагаю. Весь проблемный код относится к кнопке <cmdExecute>. Заранее благодарю всех, кто поможет.
Добрый вечер! Помогите одолеть очередную трудность, а именно: в книге имеются лист "База", на котором хранятся данные, лист "Отбор", на котором временно размещаются отобранные данные для печати и лист "Напечатанные", на котором хранятся уникальные коды ранее напечатанных данных. Также имеется форма, на форме ListBox, который заполняется повторяющимися данными после фильтрации (кодами). А проблема в том, что после выбора нужного кода в ListBox и нажатии кнопки <Выполнить>, данные на лист "Отбор" с листа "База" должны попадать только после проверки по листу "Напечатанные": если уникального кода выбранной записи нет на листе "Напечатанные", она добавляется на лист "Отбор", если есть - не добавляется. То, что я изобразил, добавляет данные на лист в любом случае: есть он на листе "Напечатанные" или нет их там. Файл прилагаю. Весь проблемный код относится к кнопке <cmdExecute>. Заранее благодарю всех, кто поможет.vigl
vigl, привет попробуйте (немного кривовато, ну как есть) [vba]
Код
Private Sub cmdExecute_Click() Dim r As Range Стр_База = Sheets("База").Cells(Rows.Count, 4).End(xlUp).Row Кат = lstKod.Value
'***************лист "База"****************************************************************************** For i = 1 To Стр_База If Cells(i, 4) = Кат Then УКод = Cells(i, 2) ФИО = Cells(i, 3)
'***************лист "Напечатанные"****************************************************************** Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)
If r Is Nothing Then Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 2).Value = Array(УКод, ФИО) Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод End If
End If Next End Sub
[/vba]
vigl, привет попробуйте (немного кривовато, ну как есть) [vba]
Код
Private Sub cmdExecute_Click() Dim r As Range Стр_База = Sheets("База").Cells(Rows.Count, 4).End(xlUp).Row Кат = lstKod.Value
'***************лист "База"****************************************************************************** For i = 1 To Стр_База If Cells(i, 4) = Кат Then УКод = Cells(i, 2) ФИО = Cells(i, 3)
'***************лист "Напечатанные"****************************************************************** Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)
If r Is Nothing Then Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 2).Value = Array(УКод, ФИО) Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод End If
Sheets("База").Select Стр_База= ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row Код = lstKod.Value
'**************************************************************************************************************** For i = 1 To Стр_База Cells(i, 14).Select sm = ActiveCell.Value If Format(sm) = Код Then УКод = Cells(i, 2) Фам = Cells(i, 4) Имя = Cells(i, 5) Отч = Cells(i, 6) ДР = Cells(i, 7) МР = Cells(i, 8) НП = Cells(i, 9) Улица = Cells(i, 10) Дом = Cells(i, 11) Корп = Cells(i, 12) Кварт = Cells(i, 13)
'**************************************************************************************************** Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)
If r Is Nothing Then Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 11).Value = Array( УКод, Фам, Имя, Отч, ДР, МР, НП, Улица, Дом, Корп, Кварт) 'Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод End If
End If Next
End If
[/vba]
nilem, [vba]
Код
Sheets("База").Select Стр_База= ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row Код = lstKod.Value
'**************************************************************************************************************** For i = 1 To Стр_База Cells(i, 14).Select sm = ActiveCell.Value If Format(sm) = Код Then УКод = Cells(i, 2) Фам = Cells(i, 4) Имя = Cells(i, 5) Отч = Cells(i, 6) ДР = Cells(i, 7) МР = Cells(i, 8) НП = Cells(i, 9) Улица = Cells(i, 10) Дом = Cells(i, 11) Корп = Cells(i, 12) Кварт = Cells(i, 13)
'**************************************************************************************************** Set r = Sheets("Напечатанные").Columns(2).Find(УКод, LookIn:=xlValues, lookat:=xlWhole)
If r Is Nothing Then Sheets("Отбор").Cells(Rows.Count, 2).End(xlUp)(2, 1).Resize(, 11).Value = Array( УКод, Фам, Имя, Отч, ДР, МР, НП, Улица, Дом, Корп, Кварт) 'Sheets("Напечатанные").Cells(Rows.Count, 2).End(xlUp)(2, 1).Value = УКод End If