Есть таблица. Эту таблицу обновляет подрядчик. Однако, при заполнении они часто допускают ошибки, формулы они корректируют вручную, что приводит к тому, что в целом таблица получается не правильная.
Мне надоЯ бы хотел, чтоб перед тем, как отправить на печать, либо перед сохранение файла ячейки с формулами "возвращались" к исправному содержанию.
Я понимаю, что нет такого макроса, который бы сам всё считал. Поэтому как один из этапов решения данной проблемы я создал копию таблицы.
Теперь мне нужен код я бы хотел найти способ, который бы перед печатью/сохранением копировал ячейки с листа "sheet2" в соответствующие ячейки листа "sheet1".
Дык и запишите Ваше копирование макрорекордером. И повесьте этот макрос на соответствующие события. Что непонятно спросите. А то только указания от Вас: "Мне надо", "Теперь мне нужен код"... Стол заказов у нас в другой ветке: http://www.planetaexcel.ru/forum/?PAGE_NAME=list&FID=7
KuklP, извините, что задел Ваше самолюбие. Впредь, постараюсь правильно излагать просьбы. И спасибо за вариант решения задачи. Однако, это не решает вопроса того, чтоб макрос запускался перед печатью и перед сохранением. Но всеравно спасибо. Своё сообщение отредактировал соответственно.
Подскажите, кто в курсе. Вот что я тут надумал исходя из того, что я прочел и понял:
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("Master_PMS_formula").Select
Range("Q13:R1933").Select
Selection.Copy
Sheets("Master_PMS").Select
Range("Q13:R1933").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
Application.CutCopyMode = False
Sheets("Master_PMS_formula").Select
Range("AB13:AC1933").Select
Selection.Copy
Sheets("Master_PMS").Select
Range("AB13:AC1933").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Sheets("Master_PMS_formula").Select
Range("Q13:R1933").Select
Selection.Copy
Sheets("Master_PMS").Select
Range("Q13:R1933").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
Application.CutCopyMode = False
Sheets("Master_PMS_formula").Select
Range("AB13:AC1933").Select
Selection.Copy
Sheets("Master_PMS").Select
Range("AB13:AC1933").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Замеченные ... свойства, которых хотелось бы избежать: 1) Макрос не работает, если хоть один из листов скрыт ("Master_PMS" или "Master_PMS_formula"). Как можно обойти этот пункт и чтоб макрос работал и на скрытых (а так же супер скрытых) листах? 2) После макроса, остаётся выделение копированных/вставленных ячеек. Что прописать, чтоб после макроса выделение ячеек возвращалось к начальному положению.
Буду благодарен за подскази (желательно со сцылками).
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("Master_PMS_formula").Range("Q13:R1933").Copy
Sheets("Master_PMS").Range("Q13").PasteSpecial Paste:=xlPasteFormulas
Sheets("Master_PMS_formula").Range("AB13:AC1933").Copy
Sheets("Master_PMS").Range("AB13").PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
'Application.ScreenUpdating = True - лишнее, мы не отключали.
End Sub
Юрий М, KuklP, спасибо большое! Я пользовался режимом записи макроса. Поэтому так и записал. Огромное спасибо. Буду знать. "'Application.ScreenUpdating = True" осталось с предыдущей модификации. (экспериментировал).
Юрий М, извиняюсь. Как то само получилось. =) (насчёт "сцылки"
KuklP, а как быть с "Макрос не работает, если хоть один из листов скрыт ("Master_PMS" или "Master_PMS_formula" ."? Потому что я не понял Юрий М в части "1. Программно менять видимость листов. "
SanShiney, Еще лучше(раз уж мы знаем диапазоны) делать так:
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("Master_PMS").Range("Q13:R1933").Formula = _
Sheets("Master_PMS_formula").Range("Q13:R1933").Formula
Sheets("Master_PMS").Range("AB13:AC1933").Formula = _
Sheets("Master_PMS_formula").Range("AB13:AC1933").Formula
End Sub
Мой и первый и второй варианты работают и с очень скрытыми листами.
KuklP, воспользовался Вашим 2 примером. Получил следующее: 1) В первом диапазоне макрос затёр все данные и сверху переписал весь диапазон данных, включая пустые ячейки 2) Во втором диапазоне он поменял только первую ячейку 3) Не перенёс свойство функции массива, изза чего вся таблица в ошибках. Как исправить? я не понимаю... извините...
1 пример переносит функцию массивов, однако так же "затирает" все данные, а не вставляет только формулы с пропуцском пустых... В всё, разобрался. Вот так будет то что мне нужно:
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("Master_PMS_formula").Range("Q13:R1933").Copy
Sheets("Master_PMS").Range("Q13").PasteSpecial Paste:=xlPasteFormulas, SkipBlanks:=True
Sheets("Master_PMS_formula").Range("AB13:AC1933").Copy
Sheets("Master_PMS").Range("AB13").PasteSpecial Paste:=xlPasteFormulas, SkipBlanks:=True
Application.CutCopyMode = False
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets("Master_PMS_formula").Range("Q13:R1933").Copy
Sheets("Master_PMS").Range("Q13").PasteSpecial Paste:=xlPasteFormulas, SkipBlanks:=True
Sheets("Master_PMS_formula").Range("AB13:AC1933").Copy
Sheets("Master_PMS").Range("AB13").PasteSpecial Paste:=xlPasteFormulas, SkipBlanks:=True
Application.CutCopyMode = False
End Sub
О формулах массива и пустых ячейках слышу от Вас только сейчас. Тогда используйте первый вариант, добавив параметр SkipBlanks:=True. Логично было бы защищать только те ячейки, к-рые содержат формулы. Я на это и расчитывал. А у Вас там каша
KuklP пишет: Логично было бы защищать только те ячейки, к-рые содержат формулы
Абсолютно с Вами согласен. Но работник у подрядчика настолько ... ну в общем, он не знает excel. И когда я давал ему столбец с перемешанными ячейками (защищённый и не защищенный) его вводило в ступор. Т.е. когда он пытается 2000 ячеек вставить в один столбец и это (вдруг) выдает ошибку. И путей решения этого он не нашел. Для чего мне надо было найти способ, чтоб после каждого внесения данных подрядчиком программа за него возвращала все формулы на места.