Доброго всем времени суток. Нужна помощь с созданием кнопки или редактирования выпадающего списка. Есть шаблон который автоматически заполняется данными по мере выбора товара. Столкнулся с проблемой не возможности пустить в печать одновременно отчеты по каждому товару. Подскажите пожалуйста как можно решить мою проблему?
Доброго всем времени суток. Нужна помощь с созданием кнопки или редактирования выпадающего списка. Есть шаблон который автоматически заполняется данными по мере выбора товара. Столкнулся с проблемой не возможности пустить в печать одновременно отчеты по каждому товару. Подскажите пожалуйста как можно решить мою проблему?Virus
Sub PrintRepforAll() Set sh1 = Worksheets("БД") Set sh2 = Worksheets("Шаблон") For Each objCell In sh1.Range(sh1.Cells(2, 1), sh1.Cells(sh1.Rows.Count, 1).End(xlUp)) sh2.Range("G7").Value = objCell.Value sh2.PrintOut Copies:=1, IgnorePrintAreas:=False Next End Sub
[/vba]
вот только уникальность тут ровно такая, как и в вашем выпадающем списке. то есть выйдет 18 отчетов, а не 6.
[vba]
Код
Sub PrintRepforAll() Set sh1 = Worksheets("БД") Set sh2 = Worksheets("Шаблон") For Each objCell In sh1.Range(sh1.Cells(2, 1), sh1.Cells(sh1.Rows.Count, 1).End(xlUp)) sh2.Range("G7").Value = objCell.Value sh2.PrintOut Copies:=1, IgnorePrintAreas:=False Next End Sub
[/vba]
вот только уникальность тут ровно такая, как и в вашем выпадающем списке. то есть выйдет 18 отчетов, а не 6.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Понедельник, 27.11.2017, 14:24
Sub PrintRepforAll() Dim sh1 As Worksheet Dim rRng As Range, objCell With Worksheets("БД") Set rRng = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With
With Worksheets("Шаблон") For Each objCell In rRng .Range("G7").Value = objCell.Value .PrintOut Copies:=1, IgnorePrintAreas:=False Next objCell End With
Set rRng = Nothing End Sub
[/vba] Кушаем меньше памяти, в конце освобождаем занятый кусок.
bmv98rus, я писал бы так: [vba]
Код
Sub PrintRepforAll() Dim sh1 As Worksheet Dim rRng As Range, objCell With Worksheets("БД") Set rRng = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With
With Worksheets("Шаблон") For Each objCell In rRng .Range("G7").Value = objCell.Value .PrintOut Copies:=1, IgnorePrintAreas:=False Next objCell End With
Set rRng = Nothing End Sub
[/vba] Кушаем меньше памяти, в конце освобождаем занятый кусок.vikttur
Сообщение отредактировал vikttur - Понедельник, 27.11.2017, 14:39
А у меня такой вариант. Печатает уникальные значения [vba]
Код
Sub tt() With Sheets("БД") n_ = .Range("A" & .Rows.Count).End(3).Row - 1 If n_ < 2 Then Exit Sub ar = .Range("A2").Resize(n_) Set slov = CreateObject("Scripting.Dictionary") With Sheets("Шаблон") For i = 2 To n_ If Not slov.Exists(ar(i, 1)) Then aaa = slov.Item(ar(i, 1)) .Range("G7") = ar(i, 1) ' DoEvents' возможно понадобится .PrintOut Copies:=1, IgnorePrintAreas:=False End If Next i End With End With End Sub
[/vba]
А у меня такой вариант. Печатает уникальные значения [vba]
Код
Sub tt() With Sheets("БД") n_ = .Range("A" & .Rows.Count).End(3).Row - 1 If n_ < 2 Then Exit Sub ar = .Range("A2").Resize(n_) Set slov = CreateObject("Scripting.Dictionary") With Sheets("Шаблон") For i = 2 To n_ If Not slov.Exists(ar(i, 1)) Then aaa = slov.Item(ar(i, 1)) .Range("G7") = ar(i, 1) ' DoEvents' возможно понадобится .PrintOut Copies:=1, IgnorePrintAreas:=False End If Next i End With End With End Sub
[offtop] vikttur, К несчастью тут нет смайла, коим можно выразить глубочайшее почтение, к ряду участников планетарного и мирового форумов кроме как так . И это я на полном серьезе. Для продуктива - беспорно надо так, да и ваще все объекты очищать правильно. Я правда не помню чтоб была разница между использованием With и предопределенным объектом и совсем не понял зачем первый with для одного set. Разве что так более универсально.[/offtop]
[offtop] vikttur, К несчастью тут нет смайла, коим можно выразить глубочайшее почтение, к ряду участников планетарного и мирового форумов кроме как так . И это я на полном серьезе. Для продуктива - беспорно надо так, да и ваще все объекты очищать правильно. Я правда не помню чтоб была разница между использованием With и предопределенным объектом и совсем не понял зачем первый with для одного set. Разве что так более универсально.[/offtop]bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Понедельник, 27.11.2017, 16:04
_Boroda_, Здорово, подскажите пожалуйста отчет о печати в виде документа является обязательным параметром или можно не сохраняя просто нажать на кнопку и он пустит все экземпляры в печать?
_Boroda_, Здорово, подскажите пожалуйста отчет о печати в виде документа является обязательным параметром или можно не сохраняя просто нажать на кнопку и он пустит все экземпляры в печать?Virus
Там три четыре обращения к листу. With позволяет создать переменную (объект) на лету и сразу ее уничтожить после выхода End With (освобождаем память). а в rRng остается намного меньший объект - небольшая часть листа.
Цитата
зачем первый with для одного set
Там три четыре обращения к листу. With позволяет создать переменную (объект) на лету и сразу ее уничтожить после выхода End With (освобождаем память). а в rRng остается намного меньший объект - небольшая часть листа.vikttur
Сообщение отредактировал vikttur - Понедельник, 27.11.2017, 16:02
В этом одном Сете прописано аж 4 обращения к листу "БД". Вот затем и With, чтобы 4 раза не писать и, что гораздо важнее, чтобы 4 раза не обращаться к объекту
В этом одном Сете прописано аж 4 обращения к листу "БД". Вот затем и With, чтобы 4 раза не писать и, что гораздо важнее, чтобы 4 раза не обращаться к объекту_Boroda_
[offtop] vikttur, _Boroda_, Спасибо, а мне все ж пора за очками. Куда смотрел. А то в свой почти полтинник, как студент "Ведь знал, ведь знал .... ".[/offtop]
[offtop] vikttur, _Boroda_, Спасибо, а мне все ж пора за очками. Куда смотрел. А то в свой почти полтинник, как студент "Ведь знал, ведь знал .... ".[/offtop]bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Понедельник, 27.11.2017, 16:03