Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сохранить лист в отдельный файл. - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Сохранить лист в отдельный файл. (VBA)
Сохранить лист в отдельный файл.
Wasilich Дата: Понедельник, 28.10.2013, 22:20 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Часто встречал вопрос: - "Как сохранить лист в отдельный файл?"
Вот пример сохранения сразу несколько листов и по одному.

Корректировка и сокращение макросов приветствуется.
К сообщению приложен файл: 7023102.xls (49.5 Kb)
 
Ответить
СообщениеЧасто встречал вопрос: - "Как сохранить лист в отдельный файл?"
Вот пример сохранения сразу несколько листов и по одному.

Корректировка и сокращение макросов приветствуется.

Автор - Wasilich
Дата добавления - 28.10.2013 в 22:20
AndreTM Дата: Вторник, 29.10.2013, 02:38 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Я, вроде бы, там и там как раз и говорил про это.
А корректировка... Ну, откорректируйте:
- .InitialFileName = iPath в вашем варианте излишен. И, мне кажется, что при одиночном сохранении - подстановка имени файла в диалог более логична
- .DisplayAlerts - желательно отключать/включать тогда, когда необходимо подавить сообщения, а не на всё время процедуры
- Sheets(Sh.Name). <=> Sh. (не забывайте - Sheets() относится к ActiveWorkbook., так что использование коллекции без указания родителя - чревато)
- Попробуйте избавиться от использования ActiveWorkbook.
- Процедура массового сохранения может быть с параметром, как раз и определяющим этот ваш "конкретный" лист (или устанавливающий его на ActiveSheet)
- Процедуру сохранения одного листа можно заменить на функцию с параметрами, возврат - сохраненное имя; и тогда её можно будет использовать в процедуре массового сохранения, которая будет заключаться только в переборе нужных листов
- "Очистку" листа копии тоже можно сделать параметрической - ввести ещё один параметр функции, который будет определять, что именно нужно очистить на листе
- И плиз, не надо месседжбоксов! А если очень надо - то просто вызовы процедур оборачиваются в дополнительный интерактив. Ведь ваше сообщение неинформативно - вы же правильность копирования нигде не проверяете.


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Вторник, 29.10.2013, 02:50
 
Ответить
СообщениеЯ, вроде бы, там и там как раз и говорил про это.
А корректировка... Ну, откорректируйте:
- .InitialFileName = iPath в вашем варианте излишен. И, мне кажется, что при одиночном сохранении - подстановка имени файла в диалог более логична
- .DisplayAlerts - желательно отключать/включать тогда, когда необходимо подавить сообщения, а не на всё время процедуры
- Sheets(Sh.Name). <=> Sh. (не забывайте - Sheets() относится к ActiveWorkbook., так что использование коллекции без указания родителя - чревато)
- Попробуйте избавиться от использования ActiveWorkbook.
- Процедура массового сохранения может быть с параметром, как раз и определяющим этот ваш "конкретный" лист (или устанавливающий его на ActiveSheet)
- Процедуру сохранения одного листа можно заменить на функцию с параметрами, возврат - сохраненное имя; и тогда её можно будет использовать в процедуре массового сохранения, которая будет заключаться только в переборе нужных листов
- "Очистку" листа копии тоже можно сделать параметрической - ввести ещё один параметр функции, который будет определять, что именно нужно очистить на листе
- И плиз, не надо месседжбоксов! А если очень надо - то просто вызовы процедур оборачиваются в дополнительный интерактив. Ведь ваше сообщение неинформативно - вы же правильность копирования нигде не проверяете.

Автор - AndreTM
Дата добавления - 29.10.2013 в 02:38
RAN Дата: Вторник, 29.10.2013, 04:19 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Попробуйте избавиться от использования ActiveWorkbook

А чем не нравится ActiveWorkbook, и как еще можно идентифицировать новую книгу до ее сохранения?


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Попробуйте избавиться от использования ActiveWorkbook

А чем не нравится ActiveWorkbook, и как еще можно идентифицировать новую книгу до ее сохранения?

Автор - RAN
Дата добавления - 29.10.2013 в 04:19
AndreTM Дата: Вторник, 29.10.2013, 04:44 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
В этом методе (когда копируется один лист через .Copy без параметров) - никак. Впрочем, я же показывал: сразу после копирования - назначаем ActiveWorkbook объектной переменной. И дальше работаем исключительно с ней.
В других же случаях - методы возвращают ссылку на книгу, например:
[vba]
Код
Set NewWB = Workbooks.Add
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеВ этом методе (когда копируется один лист через .Copy без параметров) - никак. Впрочем, я же показывал: сразу после копирования - назначаем ActiveWorkbook объектной переменной. И дальше работаем исключительно с ней.
В других же случаях - методы возвращают ссылку на книгу, например:
[vba]
Код
Set NewWB = Workbooks.Add
[/vba]

Автор - AndreTM
Дата добавления - 29.10.2013 в 04:44
Wasilich Дата: Вторник, 29.10.2013, 12:53 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
А корректировка... Ну, откорректируйте:
Андрей, я не себя имел ввиду. Ибо данный пример сделан на моем уровне познания VBA.
И пример по теме может быть не только мой. Так что, предлагайте свои варианты.
 
Ответить
Сообщение
А корректировка... Ну, откорректируйте:
Андрей, я не себя имел ввиду. Ибо данный пример сделан на моем уровне познания VBA.
И пример по теме может быть не только мой. Так что, предлагайте свои варианты.

Автор - Wasilich
Дата добавления - 29.10.2013 в 12:53
RAN Дата: Вторник, 29.10.2013, 22:27 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Wasilic, вариант для 1 листа
[vba]
Код
Private Sub Save_as()
10  With Application.FileDialog(msoFileDialogSaveAs)
20      .InitialFileName = ThisWorkbook.Path & "\" & "Сравнение"
30      If .Show = 0 Then Exit Sub
40      ThisWorkbook.ActiveSheet.Copy
50      Application.DisplayAlerts = False
60      .Execute
70      Application.DisplayAlerts = True
80  End With
90  ActiveWorkbook.Close False
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеWasilic, вариант для 1 листа
[vba]
Код
Private Sub Save_as()
10  With Application.FileDialog(msoFileDialogSaveAs)
20      .InitialFileName = ThisWorkbook.Path & "\" & "Сравнение"
30      If .Show = 0 Then Exit Sub
40      ThisWorkbook.ActiveSheet.Copy
50      Application.DisplayAlerts = False
60      .Execute
70      Application.DisplayAlerts = True
80  End With
90  ActiveWorkbook.Close False
End Sub
[/vba]

Автор - RAN
Дата добавления - 29.10.2013 в 22:27
Wasilich Дата: Вторник, 29.10.2013, 23:40 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Wasilic, вариант для 1 листа
Спасибо Андрей. Только Ник мой убери, это ж не для меня, :) и цифорки из кода тоже, иначе будут вопросы - "а зачем цифры?"! :D

Вот еще варианты в примере, в т.ч. с макросом от AndreTM если он не возражает.
К сообщению приложен файл: ___2.xls (45.0 Kb)
 
Ответить
Сообщение
Wasilic, вариант для 1 листа
Спасибо Андрей. Только Ник мой убери, это ж не для меня, :) и цифорки из кода тоже, иначе будут вопросы - "а зачем цифры?"! :D

Вот еще варианты в примере, в т.ч. с макросом от AndreTM если он не возражает.

Автор - Wasilich
Дата добавления - 29.10.2013 в 23:40
RAN Дата: Среда, 30.10.2013, 00:23 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Любой каприз ....

Вариант для 1 листа
[vba]
Код
Private Sub Save_as()
    With Application.FileDialog(msoFileDialogSaveAs)
        .InitialFileName = ThisWorkbook.Path & "\" & "Сравнение"
        If .Show = 0 Then Exit Sub
        ThisWorkbook.ActiveSheet.Copy
        Application.DisplayAlerts = False
        .Execute
        Application.DisplayAlerts = True
    End With
    ActiveWorkbook.Close False
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 30.10.2013, 00:25
 
Ответить
СообщениеЛюбой каприз ....

Вариант для 1 листа
[vba]
Код
Private Sub Save_as()
    With Application.FileDialog(msoFileDialogSaveAs)
        .InitialFileName = ThisWorkbook.Path & "\" & "Сравнение"
        If .Show = 0 Then Exit Sub
        ThisWorkbook.ActiveSheet.Copy
        Application.DisplayAlerts = False
        .Execute
        Application.DisplayAlerts = True
    End With
    ActiveWorkbook.Close False
End Sub
[/vba]

Автор - RAN
Дата добавления - 30.10.2013 в 00:23
RAN Дата: Среда, 30.10.2013, 00:33 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Wasilic, лучше выкладывай коды, а не файлы.
Файл качать надо, а по коду сразу может быть понятно - не то.
Файлы - бонус.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеWasilic, лучше выкладывай коды, а не файлы.
Файл качать надо, а по коду сразу может быть понятно - не то.
Файлы - бонус.

Автор - RAN
Дата добавления - 30.10.2013 в 00:33
Wasilich Дата: Среда, 30.10.2013, 01:33 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Файл качать надо, а по коду сразу может быть понятно - не то.

Это нам с тобой просто, посмотрел и понятно. А тем кто знает, что "никто не знает" - сложновато будет. А, в фале оно уже как бы и работает. ИМХО. :)
 
Ответить
Сообщение
Файл качать надо, а по коду сразу может быть понятно - не то.

Это нам с тобой просто, посмотрел и понятно. А тем кто знает, что "никто не знает" - сложновато будет. А, в фале оно уже как бы и работает. ИМХО. :)

Автор - Wasilich
Дата добавления - 30.10.2013 в 01:33
AndreTM Дата: Среда, 30.10.2013, 02:47 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
от AndreTM если он не возражает
Нэ вазражайу (с)
К сообщению приложен файл: 0748227.jpg (11.4 Kb)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
от AndreTM если он не возражает
Нэ вазражайу (с)

Автор - AndreTM
Дата добавления - 30.10.2013 в 02:47
DAKRAY Дата: Четверг, 09.01.2014, 18:19 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 73
Репутация: 1 ±
Замечаний: 0% ±

Excel 2003
Всем добрый.

В приложении еще один простенький вариант сохранения.
Изначальный код мне скинул antal10, переделал под свои нужды.

[vba]
Код
Private Sub SaveSheets_Click()
Dim Fname As String
     Application.ScreenUpdating = False
     Fname = ThisWorkbook.Path & "\" & Sheets("Sheet1").Range("A1").Value & " " & Range("B1").Text & ".xls" 'тут название файла состоит из названия фирмы и нр. счета
     Sheets(Array("Sheet1", "Sheet2")).Copy 'указываем листы, которые хотим оставить
     Sheets("Sheet1").Shapes("SaveSheets").Delete 'удаляем ненужные кнопки (в моем случае у меня есть кнопки, которые должны остаться)
     With ActiveWorkbook
          Application.DisplayAlerts = False
          .SaveAs Filename:=Fname
          Application.ScreenUpdating = True
          Application.DisplayAlerts = True
          '.Close
     End With
     Workbooks("Book_Save.xls").Close 0
End Sub
[/vba]

П.С. Только вот никак не получается сделать так, чтобы модуль (функция) тоже копировался в новую книгу. Там у меня сумма прописью. Можно в принципе и значение только копировать, не обязательно с модулем - как проще. Если не сложно help подскажите!)
К сообщению приложен файл: Book_Save.xls (49.5 Kb)
 
Ответить
СообщениеВсем добрый.

В приложении еще один простенький вариант сохранения.
Изначальный код мне скинул antal10, переделал под свои нужды.

[vba]
Код
Private Sub SaveSheets_Click()
Dim Fname As String
     Application.ScreenUpdating = False
     Fname = ThisWorkbook.Path & "\" & Sheets("Sheet1").Range("A1").Value & " " & Range("B1").Text & ".xls" 'тут название файла состоит из названия фирмы и нр. счета
     Sheets(Array("Sheet1", "Sheet2")).Copy 'указываем листы, которые хотим оставить
     Sheets("Sheet1").Shapes("SaveSheets").Delete 'удаляем ненужные кнопки (в моем случае у меня есть кнопки, которые должны остаться)
     With ActiveWorkbook
          Application.DisplayAlerts = False
          .SaveAs Filename:=Fname
          Application.ScreenUpdating = True
          Application.DisplayAlerts = True
          '.Close
     End With
     Workbooks("Book_Save.xls").Close 0
End Sub
[/vba]

П.С. Только вот никак не получается сделать так, чтобы модуль (функция) тоже копировался в новую книгу. Там у меня сумма прописью. Можно в принципе и значение только копировать, не обязательно с модулем - как проще. Если не сложно help подскажите!)

Автор - DAKRAY
Дата добавления - 09.01.2014 в 18:19
shebelme Дата: Понедельник, 06.10.2014, 08:05 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Прошу вашей помощи!
Подскажите как изменить код таким образом, что бы был прописан конкретный адрес для сохранения нового файла, а не ручной выбор.
За ранее спасибо!
 
Ответить
СообщениеПрошу вашей помощи!
Подскажите как изменить код таким образом, что бы был прописан конкретный адрес для сохранения нового файла, а не ручной выбор.
За ранее спасибо!

Автор - shebelme
Дата добавления - 06.10.2014 в 08:05
Wasilich Дата: Среда, 08.10.2014, 00:21 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
изменить код таким образом, что бы был прописан конкретный адрес

Так попробуйте.
[vba]
Код
Sub Лист_в_файл() 'Сохранить текущий лист.
     Dim List$, iPath$
    
     iPath = "D:\Папка\папка\" ' конкретный адрес для сохранения нового файла
    
     Application.ScreenUpdating = False
     Application.DisplayAlerts = False
     List = ActiveSheet.Name
     Sheets(List).Copy
     Sheets(List).UsedRange.Value = Sheets(List).UsedRange.Value
     Sheets(List).Buttons.Delete 'Удаляем кнопки
     'Sheets(List).DrawingObjects.Delete 'Удаляем все элементы
     ActiveWorkbook.SaveAs iPath & List '& ".xls"
     ActiveWorkbook.Close False
     Application.DisplayAlerts = True
     Application.ScreenUpdating = True
     MsgBox "Готово!"
  End Sub
[/vba]
 
Ответить
Сообщение
изменить код таким образом, что бы был прописан конкретный адрес

Так попробуйте.
[vba]
Код
Sub Лист_в_файл() 'Сохранить текущий лист.
     Dim List$, iPath$
    
     iPath = "D:\Папка\папка\" ' конкретный адрес для сохранения нового файла
    
     Application.ScreenUpdating = False
     Application.DisplayAlerts = False
     List = ActiveSheet.Name
     Sheets(List).Copy
     Sheets(List).UsedRange.Value = Sheets(List).UsedRange.Value
     Sheets(List).Buttons.Delete 'Удаляем кнопки
     'Sheets(List).DrawingObjects.Delete 'Удаляем все элементы
     ActiveWorkbook.SaveAs iPath & List '& ".xls"
     ActiveWorkbook.Close False
     Application.DisplayAlerts = True
     Application.ScreenUpdating = True
     MsgBox "Готово!"
  End Sub
[/vba]

Автор - Wasilich
Дата добавления - 08.10.2014 в 00:21
Ферхо Дата: Воскресенье, 07.12.2014, 14:28 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Не претендую ни на что, просто я делаю так (возможно кому-то пригодится идея)

[vba]
Код

'сохранить лист в отдельном файле
'sSheetName - имя сохраняемого листа (если такого нет - ни чего не делается)
'sNewFileName - имя файла (если не задано - берется имя листа)
'sNewPath - куда сохраняем, если не задано, в текущую
'sRngDelList - если надо указываем диапазоны столбцов для удаления
'bDelFurmula - если указано - удаляем формулы и ссылки
'sSubRun - если нужна дополнительная обработка - укажим нужную процедуру
Function fnSheetsSave(ByVal sSheetName As String, _
                         Optional ByVal sNewFileName As String = "", _
                         Optional ByVal sNewPath As String = "", _
                         Optional ByVal sRngDelList As String = "", _
                         Optional ByVal bDelFurmula As Boolean = False, _
                         Optional ByVal sSubRun As String = "") As Boolean
                   
Dim sFullFileName As String, arDelCol, iI As Integer, sCol As String
Dim strPS As String: strPS = Application.PathSeparator

     fnSheetsSave = False

     If Not fnSheetsIsExist(sSheetName) Then Exit Function
      
     TRC.Pop "fnSheetsSave"
     TRC.INFO "Сохранение листа в отдельную книгу", eColorBloc
      
     If sNewFileName = "" Then sNewFileName = sSheetName
      
mChkPath:
     'проверим и если что, сформируем путь
     If sNewPath = "" Then
         sNewPath = ActiveWorkbook.path & strPS
     Else
         If Right(sNewPath, 1) <> strPS Then sNewPath = sNewPath & strPS
         If Not fnPathIsExists(sNewPath) Then
             sNewPath = ""
             GoTo mChkPath
         End If
     End If
      
     'создаем полный путь к новому файлу
     sFullFileName = sNewPath & sNewFileName & IIf(fnGetFileExt(sNewFileName) = "", ".xls", "")
      
     'возможен долгий процесс, поэтому
     'дадим возможность поработать другим
     DoEvents
      
     On Error Resume Next
     'создаем копию листа...
     'создается новая книга и она становится активной
     ThisWorkbook.Sheets(sSheetName).Copy
     TRC.NOERROR "Лист скопирован в новую книгу (" & sSheetName & ")"
     If TRC.IFERROR("ОШИБКА копирования листа (" & sSheetName & ") %1") Then GoTo lEXITfnSheetsSave
     'после возможно долгого процесса
     'дадим возможность поработать другим
     DoEvents
      
     Application.ScreenUpdating = False
      
     If bDelFurmula = True Then
         'убираем ссылки и формулы
         ActiveSheet.Range("A1").CurrentRegion.Value = ActiveSheet.Range("A1").CurrentRegion.Value
         TRC.INFO "Формулы удалены"
     End If
      
     'однозначно убираем перенос по словам
     ActiveSheet.Range("A1").CurrentRegion.WrapText = False
      
     'если указаны столбцы на удаление - удалим их
     If sRngDelList <> "" Then
         arDelCol = Split(sRngDelList, " ")
         For iI = 0 To UBound(arDelCol)
             sCol = arDelCol(iI)
             ActiveSheet.Range(sCol).Delete
         Next iI
         TRC.INFO "Столбцы удалены (" & sRngDelList & ")"
     End If
      
     'если указана дополнительная функция для обработки - выполним ее
     If sSubRun <> "" Then
         Application.Run sSubRun
         TRC.INFO "Функция дополнительной обработки выполнена (" & sSubRun & ")"
     End If
      
     'сохраняем файл со всеми изменениями
     ActiveWorkbook.SaveCopyAs sFullFileName
     ActiveWorkbook.Close SaveChanges:=False
     TRC.NOERROR "Новая книга сохранена (" & sFullFileName & ")"
     If TRC.IFERROR("ОШИБКА! Книга не сохранена (" & sFullFileName & ") %1") Then GoTo lEXITfnSheetsSave
      
     fnSheetsSave = True
      
lEXITfnSheetsSave:

     Application.ScreenUpdating = True
      
     TRC.Push

End Function

[/vba]


Если очень хочется, то можно!

2B|`2B?
 
Ответить
СообщениеНе претендую ни на что, просто я делаю так (возможно кому-то пригодится идея)

[vba]
Код

'сохранить лист в отдельном файле
'sSheetName - имя сохраняемого листа (если такого нет - ни чего не делается)
'sNewFileName - имя файла (если не задано - берется имя листа)
'sNewPath - куда сохраняем, если не задано, в текущую
'sRngDelList - если надо указываем диапазоны столбцов для удаления
'bDelFurmula - если указано - удаляем формулы и ссылки
'sSubRun - если нужна дополнительная обработка - укажим нужную процедуру
Function fnSheetsSave(ByVal sSheetName As String, _
                         Optional ByVal sNewFileName As String = "", _
                         Optional ByVal sNewPath As String = "", _
                         Optional ByVal sRngDelList As String = "", _
                         Optional ByVal bDelFurmula As Boolean = False, _
                         Optional ByVal sSubRun As String = "") As Boolean
                   
Dim sFullFileName As String, arDelCol, iI As Integer, sCol As String
Dim strPS As String: strPS = Application.PathSeparator

     fnSheetsSave = False

     If Not fnSheetsIsExist(sSheetName) Then Exit Function
      
     TRC.Pop "fnSheetsSave"
     TRC.INFO "Сохранение листа в отдельную книгу", eColorBloc
      
     If sNewFileName = "" Then sNewFileName = sSheetName
      
mChkPath:
     'проверим и если что, сформируем путь
     If sNewPath = "" Then
         sNewPath = ActiveWorkbook.path & strPS
     Else
         If Right(sNewPath, 1) <> strPS Then sNewPath = sNewPath & strPS
         If Not fnPathIsExists(sNewPath) Then
             sNewPath = ""
             GoTo mChkPath
         End If
     End If
      
     'создаем полный путь к новому файлу
     sFullFileName = sNewPath & sNewFileName & IIf(fnGetFileExt(sNewFileName) = "", ".xls", "")
      
     'возможен долгий процесс, поэтому
     'дадим возможность поработать другим
     DoEvents
      
     On Error Resume Next
     'создаем копию листа...
     'создается новая книга и она становится активной
     ThisWorkbook.Sheets(sSheetName).Copy
     TRC.NOERROR "Лист скопирован в новую книгу (" & sSheetName & ")"
     If TRC.IFERROR("ОШИБКА копирования листа (" & sSheetName & ") %1") Then GoTo lEXITfnSheetsSave
     'после возможно долгого процесса
     'дадим возможность поработать другим
     DoEvents
      
     Application.ScreenUpdating = False
      
     If bDelFurmula = True Then
         'убираем ссылки и формулы
         ActiveSheet.Range("A1").CurrentRegion.Value = ActiveSheet.Range("A1").CurrentRegion.Value
         TRC.INFO "Формулы удалены"
     End If
      
     'однозначно убираем перенос по словам
     ActiveSheet.Range("A1").CurrentRegion.WrapText = False
      
     'если указаны столбцы на удаление - удалим их
     If sRngDelList <> "" Then
         arDelCol = Split(sRngDelList, " ")
         For iI = 0 To UBound(arDelCol)
             sCol = arDelCol(iI)
             ActiveSheet.Range(sCol).Delete
         Next iI
         TRC.INFO "Столбцы удалены (" & sRngDelList & ")"
     End If
      
     'если указана дополнительная функция для обработки - выполним ее
     If sSubRun <> "" Then
         Application.Run sSubRun
         TRC.INFO "Функция дополнительной обработки выполнена (" & sSubRun & ")"
     End If
      
     'сохраняем файл со всеми изменениями
     ActiveWorkbook.SaveCopyAs sFullFileName
     ActiveWorkbook.Close SaveChanges:=False
     TRC.NOERROR "Новая книга сохранена (" & sFullFileName & ")"
     If TRC.IFERROR("ОШИБКА! Книга не сохранена (" & sFullFileName & ") %1") Then GoTo lEXITfnSheetsSave
      
     fnSheetsSave = True
      
lEXITfnSheetsSave:

     Application.ScreenUpdating = True
      
     TRC.Push

End Function

[/vba]

Автор - Ферхо
Дата добавления - 07.12.2014 в 14:28
kbcgv Дата: Суббота, 10.01.2015, 15:54 | Сообщение № 16
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Wasilic, вариант для 1 листа

Private Sub Save_as()
10 With Application.FileDialog(msoFileDialogSaveAs)
20 .InitialFileName = ThisWorkbook.Path & "\" & "Сравнение"
30 If .Show = 0 Then Exit Sub
40 ThisWorkbook.ActiveSheet.Copy
50 Application.DisplayAlerts = False
60 .Execute
70 Application.DisplayAlerts = True
80 End With
90 ActiveWorkbook.Close False
End Sub


Пригодился идеально ваш код. Спасибо.

Попытался из него сделать надстройку. Чтобы добавить ссылку на макрос в панель быстрого запуска эксель. Сохранив его в формате надстройки. В этом случае не работает, только из этого же файла. Подскажите пожалуйста как его сделать для надстройки.

В нём имя изменил, для того чтобы формировал имя из ячеек на листе.

[vba]
Код
Sub Save_as()
10 With Application.FileDialog(msoFileDialogSaveAs)
20 .InitialFileName = [b3] & " " & [b8]
30 If .Show = 0 Then Exit Sub
40 ThisWorkbook.ActiveSheet.Copy
50 Application.DisplayAlerts = False
60 .Execute
70 Application.DisplayAlerts = True
80 End With
90 ActiveWorkbook.Close False
End Sub
[/vba]

[moder]Оформляйте коды тегами
Кнопка #[/moder]


Сообщение отредактировал DJ_Marker_MC - Суббота, 10.01.2015, 16:28
 
Ответить
Сообщение
Wasilic, вариант для 1 листа

Private Sub Save_as()
10 With Application.FileDialog(msoFileDialogSaveAs)
20 .InitialFileName = ThisWorkbook.Path & "\" & "Сравнение"
30 If .Show = 0 Then Exit Sub
40 ThisWorkbook.ActiveSheet.Copy
50 Application.DisplayAlerts = False
60 .Execute
70 Application.DisplayAlerts = True
80 End With
90 ActiveWorkbook.Close False
End Sub


Пригодился идеально ваш код. Спасибо.

Попытался из него сделать надстройку. Чтобы добавить ссылку на макрос в панель быстрого запуска эксель. Сохранив его в формате надстройки. В этом случае не работает, только из этого же файла. Подскажите пожалуйста как его сделать для надстройки.

В нём имя изменил, для того чтобы формировал имя из ячеек на листе.

[vba]
Код
Sub Save_as()
10 With Application.FileDialog(msoFileDialogSaveAs)
20 .InitialFileName = [b3] & " " & [b8]
30 If .Show = 0 Then Exit Sub
40 ThisWorkbook.ActiveSheet.Copy
50 Application.DisplayAlerts = False
60 .Execute
70 Application.DisplayAlerts = True
80 End With
90 ActiveWorkbook.Close False
End Sub
[/vba]

[moder]Оформляйте коды тегами
Кнопка #[/moder]

Автор - kbcgv
Дата добавления - 10.01.2015 в 15:54
RAN Дата: Суббота, 10.01.2015, 16:44 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
формировал имя из ячеек на листе.

В отличие от макроса из #15, этот макрос не может в принципе.
Для того, чтобы работал из надстройки, нужно так
[vba]
Код
40 ActiveWorkbook.ActiveSheet.Copy
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
формировал имя из ячеек на листе.

В отличие от макроса из #15, этот макрос не может в принципе.
Для того, чтобы работал из надстройки, нужно так
[vba]
Код
40 ActiveWorkbook.ActiveSheet.Copy
[/vba]

Автор - RAN
Дата добавления - 10.01.2015 в 16:44
kbcgv Дата: Суббота, 10.01.2015, 17:32 | Сообщение № 18
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
В отличие от макроса из #15, этот макрос не может в принципе.


Не может делать имя из ячеек?
Я в этом ничего практически не понимаю, методом тыка всё. Именно из ячееек b3 и b8 и делает имя.

И всё как хотелось работает в виде надстройки, благодаря:

Для того, чтобы работал из надстройки, нужно так

40 ActiveWorkbook.ActiveSheet.Copy


Спасибо.
 
Ответить
Сообщение
В отличие от макроса из #15, этот макрос не может в принципе.


Не может делать имя из ячеек?
Я в этом ничего практически не понимаю, методом тыка всё. Именно из ячееек b3 и b8 и делает имя.

И всё как хотелось работает в виде надстройки, благодаря:

Для того, чтобы работал из надстройки, нужно так

40 ActiveWorkbook.ActiveSheet.Copy


Спасибо.

Автор - kbcgv
Дата добавления - 10.01.2015 в 17:32
AVI Дата: Среда, 07.09.2016, 05:36 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 523
Репутация: 17 ±
Замечаний: 0% ±

Excel 2016
Добрый день!
Как сделать так, что бы при сохранении файла удалялись 5 первых столбцов?
И как при сохранении можно самостоятельно называть файл?


Сообщение отредактировал AVI - Среда, 07.09.2016, 05:39
 
Ответить
СообщениеДобрый день!
Как сделать так, что бы при сохранении файла удалялись 5 первых столбцов?
И как при сохранении можно самостоятельно называть файл?

Автор - AVI
Дата добавления - 07.09.2016 в 05:36
китин Дата: Среда, 07.09.2016, 07:20 | Сообщение № 20
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Как сделать так

правила прочитать и задать вопрос в соответствующей теме


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщение
Как сделать так

правила прочитать и задать вопрос в соответствующей теме

Автор - китин
Дата добавления - 07.09.2016 в 07:20
Мир MS Excel » Вопросы и решения » Готовые решения » Сохранить лист в отдельный файл. (VBA)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!