С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 50
1

Сохранение листа в отдельную книгу. Как добиться удаления макроса и кнопки его запуска на копии?

09.09.2015, 09:47. Показов 1611. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброе утро. Помогите пожалуйста решить несколько задач по данному коду:
1. Нужно, чтобы при сохранении листа в новую книгу, на копии, кнопка запуска макроса, и желательно сам макрос, были удалены.
2. Была возможность выбора формата сохранения. В частности, помимо стандартного формата xls, были еще: xlsx, CSV(Разделители-запятые) и pdf.


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2015, 09:47
Ответы с готовыми решениями:

Копирование одного листа в отдельную книгу при сохранении
Друзья, есть замечательный макрос, который при сохранении создает копию книги.xlsm в формате xlsx в...

Как скрепить три макроса для запуска от нажатия одной определённой кнопки ?
Как можно соединить вот эти три макроса,(какой командой в коде это возможно сделать,если это...

Настройка кнопки запуска макроса на панели быстрого доступа
Есть макрос в экселе, вынес его на панель быстрого доступа. Как-нибудь можно сделать, чтобы эта...

Копирование листа и вставка его в ту же книгу с заданием имени
Уважаемые форумчане, нужна ваша помощь Ситуация следующая: Есть цикл, который перебирает каждую...

4
5613 / 1596 / 415
Регистрация: 23.12.2010
Сообщений: 2,397
Записей в блоге: 1
09.09.2015, 12:07 2
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Sub SaveActiveSheetWithValuesAndFormats()
' Сохранить лист в отдельную книгу, сохранить только значения и оформление
    Dim sh As Worksheet, wbNew As Workbook, cFileName, LastRow&, LastCol&
    Set sh = ActiveSheet
    cFileName = Application.GetSaveAsFilename(sh.Name)
    If cFileName = False Then Exit Sub
    Application.ScreenUpdating = False
    Workbooks.Add xlWBATWorksheet
    Set wbNew = ActiveWorkbook
    With wbNew
        With .Sheets(1)
            .Name = sh.Name
            With sh
                LastRow = .UsedRange.Rows.Count + .UsedRange.Row - 1
                LastCol = .UsedRange.Columns.Count + .UsedRange.Column - 1
                .Range(.Cells(1, 1), .Cells(LastRow, LastCol)).Copy
            End With
            .Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            .Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            .Cells(1, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
        End With
    End With
    ' Сохраняем файл
    Application.DisplayAlerts = False
    ' В зависимости от указанного расширения
    If InStr(1, cFileName, ".xlsx") > 0 Then
        wbNew.SaveAs FileName:=(cFileName), FileFormat:=xlOpenXMLWorkbook
    ElseIf InStr(1, cFileName, ".xlsm") > 0 Then
        wbNew.SaveAs FileName:=(cFileName), FileFormat:=xlOpenXMLWorkbookMacroEnabled
    ElseIf InStr(1, cFileName, ".xls") > 0 Then
        wbNew.SaveAs FileName:=(cFileName), FileFormat:=xlExcel8
    ElseIf InStr(1, cFileName, ".csv") > 0 Then
        wbNew.SaveAs FileName:=(cFileName), FileFormat:=xlCSV
    ElseIf InStr(1, cFileName, ".pdf") > 0 Then
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
        (cFileName), Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End If
    Application.DisplayAlerts = True
    wbNew.Close 0
    Application.ScreenUpdating = True
    sh.Activate
End Sub
1
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 50
09.09.2015, 13:56  [ТС] 3
KoGG, благодарю за ответ. Попробовал Ваш макрос, но к сожалению, почему-то он не корректно работает. Первый момент, когда открывается окно сохранения документа нет возможности выбора типа файла, есть только выбор "Все файлы". И второй момент, сохранения в отдельную книгу как такового не происходит, только выделяется диапазон заполненных ячеек. Что может быть?

Добавлено через 58 минут
KoGG, понял кажется. Я так понимаю, данный макрос работает если указать после названия нужное расширение, а можно сделать так, чтобы формат сохранения выбирался в окне сохранения где указывается тип файла?
0
5613 / 1596 / 415
Регистрация: 23.12.2010
Сообщений: 2,397
Записей в блоге: 1
10.09.2015, 19:20 4
Вместо 5 и 6 строк моего макроса вставить:
Visual Basic
1
2
3
4
5
    With Application.FileDialog(msoFileDialogSaveAs)
       .InitialFileName = sh.Name
       If .Show = 0 Then Exit Sub
       cFileName = .SelectedItems(1)
    End With
1
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 50
11.09.2015, 10:45  [ТС] 5
KoGG, спасибо Вам огромное! Единственный момент, я так понял, актуальность макроса начиная с 26 строки пропадает, так как на выбор предоставляются все форматы доступные для сохранения в Excel. С этим уже, наверное, уже ничего не сделаешь? В любом случае, спасибо Вам огромное!=)
0
11.09.2015, 10:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2015, 10:45
Помогаю со студенческими работами здесь

Скопированная в другую книгу Calc формула теряет имя листа и заменяет его на "Лист3". Как быть?
Уважаемые специалисты, добрый день. Прошу совета. Суть вопроса: При копировании формулы из...

Добавить кнопки добавления,сохранение и удаления с кодом
Как написать удаление записи или строки из базы access в С# И добавление,сохранение тоже также

Запуск макроса (написанного для актив. нужного листа) с др. листа (сложно)
Подскажите пожалуйста, есть большие макросы которые работают на активном листе, существует какой-то...

Как запретить два запуска копии программы
Как запретить два запуска копии программы почему это элементарно не работает >>>>> program...

Копировать содержимое листа одной книги, на лист в новую книгу с присвоением ей имени листа из которого копировали
Всем доброго дня! Помогите пожалуйста написать код, сам не могу написать по причине отсутствия...

Обход защиты от запуска копии программы - как перенаправить заголовок
Есть одна игра, которая запрещает играть в неё сразу с двух аккаунтов, песочницы виртуалки не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru