Как правильно написать макрос, чтобы при выполнении которого сохранялись 5 из 6 листов?
Кратко задача всего 6 листов один из них форма ввода данных, остальные уже печатные формы их необходимо сохранять отдельно для того чтобы другие пользователи могли их просматривать, необходимо чтобы при сохранении файла можно было выбирать место куда сохранить, а так же название конечного файла соответствовало названию листа. И еще чтобы при последующем открытии этих файлов не выскакивало такое окно
Заранее всем благодарен кто ответит!
Как правильно написать макрос, чтобы при выполнении которого сохранялись 5 из 6 листов?
Кратко задача всего 6 листов один из них форма ввода данных, остальные уже печатные формы их необходимо сохранять отдельно для того чтобы другие пользователи могли их просматривать, необходимо чтобы при сохранении файла можно было выбирать место куда сохранить, а так же название конечного файла соответствовало названию листа. И еще чтобы при последующем открытии этих файлов не выскакивало такое окно
Во-первых тема создана не в той ветке форума. А чтоб не выскакивало такое окно, меняйте формулы на значения во время копирования листов. P.S. И вообще, почитайте Правила. Эта Ваша тема - сплошное нарушение.
Во-первых тема создана не в той ветке форума. А чтоб не выскакивало такое окно, меняйте формулы на значения во время копирования листов. P.S. И вообще, почитайте Правила. Эта Ваша тема - сплошное нарушение.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Пятница, 25.10.2013, 02:21
Да уж, и точно, не в той ветке Но это, пожалуй, единственное нарушение, поскольку вопрос всё же более общий, и конкретного примера не требует
Создайте модуль, поместите туда код: [vba]
Код
Sub SaveActiveSheetWithValuesAndFormats() ' Сохранить лист в отдельную книгу, сохранить только значения и оформление Dim sh As Worksheet, wbNew As Workbook, cFileName Set sh = ActiveSheet cFileName = Application.GetSaveAsFilename(sh.Name, "Книга Microsoft Office Excel (*.xls), *.xls") If cFileName = False Then Exit Sub Application.ScreenUpdating = False ' Копируем лист (при этом создается новый файл с этим листом) sh.Copy Set wbNew = ActiveWorkbook ' Заменяем формулы значениями With wbNew.Sheets(1).UsedRange.Cells .Value = .Value End With ' Сохраняем файл Application.DisplayAlerts = False wbNew.SaveAs Filename:=(cFileName), FileFormat:=xlNormal ' Закрываем файл и возвращаемся в начало wbNew.Close Application.DisplayAlerts = True Application.ScreenUpdating = True sh.Activate End Sub
[/vba] И запускайте макрос с любого листа, который нужно сохранить. Можете допилить его на предмет проверки только нужных имён листов или запуска с параметром-именем листа...
Да уж, и точно, не в той ветке Но это, пожалуй, единственное нарушение, поскольку вопрос всё же более общий, и конкретного примера не требует
Создайте модуль, поместите туда код: [vba]
Код
Sub SaveActiveSheetWithValuesAndFormats() ' Сохранить лист в отдельную книгу, сохранить только значения и оформление Dim sh As Worksheet, wbNew As Workbook, cFileName Set sh = ActiveSheet cFileName = Application.GetSaveAsFilename(sh.Name, "Книга Microsoft Office Excel (*.xls), *.xls") If cFileName = False Then Exit Sub Application.ScreenUpdating = False ' Копируем лист (при этом создается новый файл с этим листом) sh.Copy Set wbNew = ActiveWorkbook ' Заменяем формулы значениями With wbNew.Sheets(1).UsedRange.Cells .Value = .Value End With ' Сохраняем файл Application.DisplayAlerts = False wbNew.SaveAs Filename:=(cFileName), FileFormat:=xlNormal ' Закрываем файл и возвращаемся в начало wbNew.Close Application.DisplayAlerts = True Application.ScreenUpdating = True sh.Activate End Sub
[/vba] И запускайте макрос с любого листа, который нужно сохранить. Можете допилить его на предмет проверки только нужных имён листов или запуска с параметром-именем листа...AndreTM
Можете допилить его на предмет ... запуска с параметром-именем листа
Затем поправить код: [vba]
Код
Sub SaveActiveSheetWithValuesAndFormats() Dim sh As Worksheet, wbNew As Workbook, cFileName Set sh = ActiveSheet
[/vba] [vba]
Код
Sub SaveActiveSheetWithValuesAndFormats(Optional sh As Worksheet) Dim wbNew As Workbook, cFileName If sh Is Nothing Then Set sh = ActiveSheet
[/vba]Ну и на своей кнопке в эвенте - перечислите вызов процедуры нужное количество раз с нужными листами...
Вот только одно непонятно - раз вы захотели интерактив при сохранении (раз требуется у юзера запросить имя файла) - то зачем делать массовое сохранение? Тут уж либо так, либо этак... А сохранение формы (один лист - в один файл, что и делает исходная процедура) может вызывать и сам пользователь, запустив этот макрос (кнопочкой на листе/юзерформе/риббоне/etc)
Можете допилить его на предмет ... запуска с параметром-именем листа
Затем поправить код: [vba]
Код
Sub SaveActiveSheetWithValuesAndFormats() Dim sh As Worksheet, wbNew As Workbook, cFileName Set sh = ActiveSheet
[/vba] [vba]
Код
Sub SaveActiveSheetWithValuesAndFormats(Optional sh As Worksheet) Dim wbNew As Workbook, cFileName If sh Is Nothing Then Set sh = ActiveSheet
[/vba]Ну и на своей кнопке в эвенте - перечислите вызов процедуры нужное количество раз с нужными листами...
Вот только одно непонятно - раз вы захотели интерактив при сохранении (раз требуется у юзера запросить имя файла) - то зачем делать массовое сохранение? Тут уж либо так, либо этак... А сохранение формы (один лист - в один файл, что и делает исходная процедура) может вызывать и сам пользователь, запустив этот макрос (кнопочкой на листе/юзерформе/риббоне/etc)AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Пятница, 25.10.2013, 22:21