Нужна Ваша помощь с написанием макроса. Имеется файл, для составления договора продажи и печати ТН, на вкладе №2 заполняется номенклатура и цена товара, на вкладке №3 формируется договор (в пункте 1 формируется таблица с заказанным товаром, добавляются строки, протягивается автосумма), на вкладке №4 формируется таблица для печати ТН (формируется таблица с заказанным товаром, добавляются строки, протягивается автосумма). Все работает хорошо, но есть один большой недостаток: при каждом заказе, на вкладках №3 и №4 нужно вручную добавлять строки (копировать формат высшей строки) и делать автосумму в итоговых колонках, иногда что-то можно забыть сделать, и документы получаются с ошибками. Прошу Вас помочь с решением данной проблемы: на вкладках №3 и №4 сделать автоматическое добавление или удаление строк по условию, которое записано на вкладке №2, т.е. если на вкладке №2 в п. 2 и тд. есть или нет наименование товара, а также подсчет автосуммы в итоговых колонках на вкладках №3 и №4.
Исходник (файл с наименованием start) и пример (файл с наименованием finish) прилагаю.
Рассчитываю на Вашу помощь, заранее спасибо!
Всем доброго времени суток!
Нужна Ваша помощь с написанием макроса. Имеется файл, для составления договора продажи и печати ТН, на вкладе №2 заполняется номенклатура и цена товара, на вкладке №3 формируется договор (в пункте 1 формируется таблица с заказанным товаром, добавляются строки, протягивается автосумма), на вкладке №4 формируется таблица для печати ТН (формируется таблица с заказанным товаром, добавляются строки, протягивается автосумма). Все работает хорошо, но есть один большой недостаток: при каждом заказе, на вкладках №3 и №4 нужно вручную добавлять строки (копировать формат высшей строки) и делать автосумму в итоговых колонках, иногда что-то можно забыть сделать, и документы получаются с ошибками. Прошу Вас помочь с решением данной проблемы: на вкладках №3 и №4 сделать автоматическое добавление или удаление строк по условию, которое записано на вкладке №2, т.е. если на вкладке №2 в п. 2 и тд. есть или нет наименование товара, а также подсчет автосуммы в итоговых колонках на вкладках №3 и №4.
Исходник (файл с наименованием start) и пример (файл с наименованием finish) прилагаю.
Здравствуйте. Добавлять как не знаю, но делаю так: Создаю сколько максимально мне нужно строк с нужным форматом, внизу итог, при печати скрываю пустые. Это как вариант. А у вас объединять после добавления придется, и после заполнения строки внизу будет создаваться пустая строка которую при печати все равно скрывать.
Здравствуйте. Добавлять как не знаю, но делаю так: Создаю сколько максимально мне нужно строк с нужным форматом, внизу итог, при печати скрываю пустые. Это как вариант. А у вас объединять после добавления придется, и после заполнения строки внизу будет создаваться пустая строка которую при печати все равно скрывать.gling
Копирование предыдущей стороки пишется макрорекордером на раз. Гемор с объединенными ячейками и форматированием под не вполне адекватный формат листа интереса не представляет.
Копирование предыдущей стороки пишется макрорекордером на раз. Гемор с объединенными ячейками и форматированием под не вполне адекватный формат листа интереса не представляет.RAN
Копирование предыдущей стороки пишется макрорекордером на раз.
Это понятно, но копировать и вставлять строки нужно только при условии, что на вкладке №2 не пустая строка с наименованием.
Я уверен, что при желании Вы (форумчане) смогли бы мне помочь, или дать хотя бы пару полезных советов (например с чего мне правильно будет начать, и какие темы почитать, что бы все собрать в одну кучу). Буду благодарен за любую подсказку, совет.
Копирование предыдущей стороки пишется макрорекордером на раз.
Это понятно, но копировать и вставлять строки нужно только при условии, что на вкладке №2 не пустая строка с наименованием.
Я уверен, что при желании Вы (форумчане) смогли бы мне помочь, или дать хотя бы пару полезных советов (например с чего мне правильно будет начать, и какие темы почитать, что бы все собрать в одну кучу). Буду благодарен за любую подсказку, совет.force
Например, нижние подписи раззместить не внизу листа, а через 5 строк под данными. Использование объединенных ячеек усложняет примитивный макрос десятикратно.
но копировать и вставлять строки нужно только при условии, что на вкладке №2 не пустая строка с наименованием.
А вот это как раз наименьшая проблема.
Например, нижние подписи раззместить не внизу листа, а через 5 строк под данными. Использование объединенных ячеек усложняет примитивный макрос десятикратно.
http://www.excel-vba.ru/forum/index.php?topic=3251.0 Найдите все темы этого ТС на том форуме, на Планете, и здесь. Там 100 пудов ваш вопрос обсосан с разных концов и с кучей решений. Он создал примерно по пятку практически однотипных тем на каждом форуме.
Можете набросать код (на примере, который Вам удобен), если не лень?
лень. Запишите рекордером, проанализируйте, после задайте вопросы. Если запишу я, то чем это будет лучше? Думаете, получится другая запись?
http://www.excel-vba.ru/forum/index.php?topic=3251.0 Найдите все темы этого ТС на том форуме, на Планете, и здесь. Там 100 пудов ваш вопрос обсосан с разных концов и с кучей решений. Он создал примерно по пятку практически однотипных тем на каждом форуме.
Он создал примерно по пятку практически однотипных тем на каждом форуме.
Прошу прощения, ОН - это кто? Если Вы про меня, то это моя единственная тема (по данному вопросу) и единственный форум который я посещаю, для поиска решений сложных задач (для меня) в MS Office
Он создал примерно по пятку практически однотипных тем на каждом форуме.
Прошу прощения, ОН - это кто? Если Вы про меня, то это моя единственная тема (по данному вопросу) и единственный форум который я посещаю, для поиска решений сложных задач (для меня) в MS Officeforce
Он - это Топик Стартер, который создал тему(ы). Мне все его темы на всехфорумах искать очень влом. Я вам дал ссылку на Первый Попавшийся. Но точно помню, во всех темах на всех форумах один вопрос обсасывался с разных? сторон.
Он - это Топик Стартер, который создал тему(ы). Мне все его темы на всехфорумах искать очень влом. Я вам дал ссылку на Первый Попавшийся. Но точно помню, во всех темах на всех форумах один вопрос обсасывался с разных? сторон.RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Воскресенье, 23.11.2014, 00:29
Вам же посоветовали, сделайте бланк документа с 10-ю строками. После заполнения, например, пятью наименованиями, нажимаете кнопку "печать", макрос скрывает пять оставшихся пустых строк, печатает документ и снова отображает пустые строки. Все. Начинай сначала.
по Вашему мнению, нужно все переделать (буду признателен за хороший совет, подсказку)
Даю, Если Вам предстоит проводить какие то операции с таблицей (да и вообще), старайтесь не объединять ячейки, ибо это гемор. Вот у Вас в третьем листе 68 колонок а в четвертом 70. Зачем? Макрос с такими таблицами не всегда работает, да и сам путаешься. Достаточно было 10, 11.
Вам же посоветовали, сделайте бланк документа с 10-ю строками. После заполнения, например, пятью наименованиями, нажимаете кнопку "печать", макрос скрывает пять оставшихся пустых строк, печатает документ и снова отображает пустые строки. Все. Начинай сначала.
по Вашему мнению, нужно все переделать (буду признателен за хороший совет, подсказку)
Даю, Если Вам предстоит проводить какие то операции с таблицей (да и вообще), старайтесь не объединять ячейки, ибо это гемор. Вот у Вас в третьем листе 68 колонок а в четвертом 70. Зачем? Макрос с такими таблицами не всегда работает, да и сам путаешься. Достаточно было 10, 11.Wasilich
Сообщение отредактировал Wasilic - Воскресенье, 23.11.2014, 09:11
А скрыть строки процедурой (см. ниже), только выбрать определенный диапазон для работы с ними, может поможете подправить код (мне нужно скрывать одновременно на листах 3 и 4, я предполагаю ActiveSheet заменить на Sheet ("3") ), и как снова, после печати, открыть строки?
[vba]
Код
Sub Hidden () Dim r As Long, FirstRow As Long, LastRow As Long FirstRow = ActiveSheet.UsedRange.Row LastRow = ActiveSheet.UsedRange.Rows.Count - 1 + ActiveSheet.UsedRange.Row For r = LastRow To FirstRow Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).Hidden = True End If Next r End Sub
А скрыть строки процедурой (см. ниже), только выбрать определенный диапазон для работы с ними, может поможете подправить код (мне нужно скрывать одновременно на листах 3 и 4, я предполагаю ActiveSheet заменить на Sheet ("3") ), и как снова, после печати, открыть строки?
[vba]
Код
Sub Hidden () Dim r As Long, FirstRow As Long, LastRow As Long FirstRow = ActiveSheet.UsedRange.Row LastRow = ActiveSheet.UsedRange.Rows.Count - 1 + ActiveSheet.UsedRange.Row For r = LastRow To FirstRow Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).Hidden = True End If Next r End Sub
Если на "3"-м листе у Вас 10 строк с 14-й по 23-ю, а на "4"-м с 28-й по 37-ю то
[vba]
Код
Sub Скрыть_3_4() With Sheets("3") For i = 14 To 23 'строки с 14-й по 23-ю If .Cells(i, 4) = "" Then '4 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With With Sheets("4") For i = 28 To 37 'строки с 28-й по 37-ю If .Cells(i, 3) = "" Then '3 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With '************************************** 'ПЕЧАТЬ '************************************** 'Отобразить Sheets("3").Rows("14:23").EntireRow.Hidden = False Sheets("4").Rows("28:37").EntireRow.Hidden = False End Sub
[/vba]
Как то так но, не проверял.
Если на "3"-м листе у Вас 10 строк с 14-й по 23-ю, а на "4"-м с 28-й по 37-ю то
[vba]
Код
Sub Скрыть_3_4() With Sheets("3") For i = 14 To 23 'строки с 14-й по 23-ю If .Cells(i, 4) = "" Then '4 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With With Sheets("4") For i = 28 To 37 'строки с 28-й по 37-ю If .Cells(i, 3) = "" Then '3 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With '************************************** 'ПЕЧАТЬ '************************************** 'Отобразить Sheets("3").Rows("14:23").EntireRow.Hidden = False Sheets("4").Rows("28:37").EntireRow.Hidden = False End Sub
Решение, которое предложил Wasilic, оказалось оптимальным на мой взгляд, я дописал сохранение файла в PDF (что б счета можно было отправлять по e-mail).
[vba]
Код
Sub Безнал() With Sheets("Счет_Печать") For i = 14 To 23 'строки с 14-й по 23-ю If .Cells(i, 4) = "0" Then '4 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With With Sheets("ТН") For i = 28 To 37 'строки с 28-й по 37-ю If .Cells(i, 3) = "0" Then '3 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With '************************************** 'ПЕЧАТЬ Sheets("Счет_Печать").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "c:\Users\Force\Desktop\" + Sheets("Покупатель").Cells(2, 14) _ , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=True '************************************** 'Отобразить Sheets("Счет_Печать").Rows("14:23").EntireRow.Hidden = False Sheets("ТН").Rows("28:37").EntireRow.Hidden = False End Sub
[/vba]
Всем спасибо за помощь, задача решена.
Решение, которое предложил Wasilic, оказалось оптимальным на мой взгляд, я дописал сохранение файла в PDF (что б счета можно было отправлять по e-mail).
[vba]
Код
Sub Безнал() With Sheets("Счет_Печать") For i = 14 To 23 'строки с 14-й по 23-ю If .Cells(i, 4) = "0" Then '4 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With With Sheets("ТН") For i = 28 To 37 'строки с 28-й по 37-ю If .Cells(i, 3) = "0" Then '3 - колонка по которой ориентируетесь на наличие данных в строке .Rows(i).EntireRow.Hidden = True End If Next End With '************************************** 'ПЕЧАТЬ Sheets("Счет_Печать").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "c:\Users\Force\Desktop\" + Sheets("Покупатель").Cells(2, 14) _ , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=True '************************************** 'Отобразить Sheets("Счет_Печать").Rows("14:23").EntireRow.Hidden = False Sheets("ТН").Rows("28:37").EntireRow.Hidden = False End Sub