Страницы: 1
RSS
Как создать копию книги, только с удаленным первым листом?
 
Здравствуйте!  
 
Есть книга с двумя листами.  
Я пытаюсь сделать макрос, делающий копию этой книги в новый файл,    
только с удаленным первым листом.  
 
Поискал подобные варианты, но дошел только до сохранения книги  
в новый файл с именем, содержащим в себе значение одной ячейки и время создания.  
 
Sub ActiveWorkbook_SaveCopyAs()  
   If Not ActiveWorkbook Is Nothing Then  
      idog = Application.WorksheetFunction.Replace _  
       (Arg1:=Range("E3"), Arg2:=3, _  
       Arg3:=1, Arg4:="_") & " "  
      iFileName$ = ActiveWorkbook.Name & " "  
      iPath$ = ActiveWorkbook.Path '''  
      iPathSeparator$ = Application.PathSeparator '"\"  
      iSaveTime$ = " " & Format(Now, "_dd/mm/yy"".xls""")  
      If iPath$ <> "" Then  
         iFileName$ = idog & Left(iFileName$, Len(iFileName$) - 4) & iSaveTime$  
      Else  
         iFileName$ = idog & iFileName$ & iSaveTime$  
         iPath$ = Application.DefaultFilePath  
      End If  
      ActiveWorkbook.SaveCopyAs _  
      Filename:=iPath$ & iPathSeparator$ & iFileName$  
   Else  
      MsgBox "В настоящий момент нет активной книги", vbExclamation, ""  
   End If  
End Sub  
 
Помогите выполнить всю задачу???  
Мне осталось сделать так, чтобы файл был с удаленным первым листом.
caustic
 
Записываем рекордером удаление первого листа. Идём в раздел "Приёмы", находим тему "Создание резервных копий ценных файлов". Добавляем туда строчкау из записанного макроса.
 
Так тут получается, что если я удалю лист до создания копии,  
то получится что оригинал пострадает.  
А мне нужно чтобы все произошло с кнопки, безо всяких изменений оригинала.
caustic
 
Вы это проверили?
 
А что проверять?, уже логика не верна получается:  
беру книгу, удаляю лист, делаю копию,  
а в оригинале лист то удалил, а мне нужно оставить оригинал без изменений.  
 
Или создать копию, а потом удалить в ней лист,    
так тут нужна информация по расположению файла на компьютере.
caustic
 
{quote}{login=CaustiC}{date=18.08.2009 06:16}{thema=}{post}А что проверять?, уже логика не верна получается:  
беру книгу, удаляю лист, делаю копию,  
а в оригинале лист то удалил, а мне нужно оставить оригинал без изменений.  
 
Или создать копию, а потом удалить в ней лист,    
так тут нужна информация по расположению файла на компьютере.{/post}{/quote}  
Не так: делаете копию , удаляете лист из копии.
 
И совсем не обязательно знать расположении копии. Она вообще может быть не сохраненной.
 
{quote}{login=Jom}{date=18.08.2009 08:59}{thema=}{post}И совсем не обязательно знать расположении копии. Она вообще может быть не сохраненной.{/post}{/quote}  
 
Нет, мне нужно чтобы была сохраненнной.  
Просто одно нажатие кнопки. Без последствий для оригинала.  
 
Ну а сохранить лист из книги в новую книгу можно? и как?
caustic
 
Простенький пример    
[code]
Sub copy()  
Dim f(), i As Long  
With ActiveWorkbook  
   ReDim f(.Worksheets.Count - 2)  
   For i = 2 To .Worksheets.Count  
   f(i - 2) = .Worksheets(i).Name  
   Next i  
End With  
ActiveWorkbook.Sheets(f()).copy  
End Sub  
[\code]
 
Или так. Путь куда сохранить и название копии сами придумаете  
Sub copy()  
Dim fname As String  
fname = "c:\copy.xls"  
ActiveWorkbook.SaveAs Filename:=fname  
Application.DisplayAlerts = False  
ActiveWorkbook.Worksheets(1).Delete  
Application.DisplayAlerts = True  
End Sub
 
{quote}{login=The_Prist}{date=18.08.2009 09:57}{thema=Re: }{post}{quote}{login=CaustiC}{date=18.08.2009 06:16}{thema=}{post}А что проверять?, уже логика не верна получается:  
беру книгу, удаляю лист, делаю копию,  
а в оригинале лист то удалил, а мне нужно оставить оригинал без изменений.{/post}{/quote}  
А вот есть что проверять.  
Вы даже без макроса откройте книгу(допустим Книга1), удалите в ней лист, Сохраните Как. Закройте.  
Затем откройте Книга1 и посмотрите все в ней листы или нет. ВСЕ ЛИСТЫ БУДУТ НА МЕСТЕ. А вот в Схраненной Как книге будут литы без удаленного.  
Когда Вы выбираете Сохранить как, то активная книга закрывается без сохранения изменений, а "на её месте" создается новая с указанным Вами именем и всеми сделанными в предыдущей книге-родителе изменениями.{/post}{/quote}  
 
Здесь получается что после этой процедуры останется открытой уже новыя книга.  
и чтобы продолжить работу с основной нужно её загружать.  
А мне нужно, чтобы пользователь мог просто нажать кнопку и продолжить работу с книгой-оригиналом.
 
Кажись получилось, но пошел немного другим путем,  
перемещал с копированием конкретный лист на другую книгу, её сохранял    
с нужным именем в туже папку где и основная.  
 
Все работает с одной кнопки, пользователь остается в основной книге и может продолжать работу.  
 
Sub ActiveWorkbook_SaveCopyAs()  
   If Not ActiveWorkbook Is Nothing Then  
      idog = Application.WorksheetFunction.Replace _  
       (Arg1:=Range("E3"), Arg2:=3, _  
       Arg3:=1, Arg4:="_") & " "  
      iFileName$ = ActiveWorkbook.Name & " "  
      iPath$ = ActiveWorkbook.Path '''  
      iPathSeparator$ = Application.PathSeparator '"\"  
      iSaveTime$ = " " & Format(Now, "_dd/mm/yy"".xls""")  
      If iPath$ <> "" Then  
         iFileName$ = idog & Left(iFileName$, Len(iFileName$) - 4) & iSaveTime$  
      Else  
         iFileName$ = idog & iFileName$ & iSaveTime$  
         iPath$ = Application.DefaultFilePath  
      End If  
      Sheets("Лист2").Copy  
      ActiveWorkbook.SaveAs _  
      Filename:=iPath$ & iPathSeparator$ & iFileName$  
      ActiveWindow.Close  
   Else  
      MsgBox "В настоящий момент нет активной книги", vbExclamation, ""  
   End If  
End Sub
caustic
 
{quote}{login=CaustiC}{date=18.08.2009 06:16}{thema=}{post}А что проверять?{/post}{/quote}  
CaustiC, преждем чем что-либо утверждать,- потрудитесь проверить. Если не верите мне, прислушайтесь к Prist'у, если и после этого есть сомнения, проделайте всё вручную и посмотрите результат. Операция СОХРАНИТЬ КАК не затронет файл-исходник! Будет сохранён совершенно новый файл.
 
{quote}{login=CaustiC}{date=18.08.2009 06:16}{thema=}{post}  
Здесь получается что после этой процедуры останется открытой уже новыя книга.  
и чтобы продолжить работу с основной нужно её загружать.  
А мне нужно, чтобы пользователь мог просто нажать кнопку и продолжить работу с книгой-оригиналом.{/post}{/quote}  
 
А ниже я пришел к решению проблемы.
caustic
Страницы: 1
Читают тему
Наверх