2015-12-28 4 views
1

Я пытаюсь создать дубликат кнопки на ленте Excel, которая при нажатии создаст дубликат файла активной книги, но я хочу, чтобы он создавал дубликат файла, имеющего только первые два листа, скопированных в дублировать файл, а не всю активную книгу.Удалить конкретные листы из Workbook

Я попытался код ниже для получения дубликатов файлов:

Sub DupliquerFeuille(control As IRibbonControl) 
     Dim Sourcewb As Workbook 
     With Application 
      .ScreenUpdating = False 
      .EnableEvents = False 
     End With 
     Set Sourcewb = ActiveWorkbook 
     'Copy the sheet to a new workbook 
     nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & ActiveWorkbook.Name 
     ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom 
     ' ActiveWorkbook.Sheets(Array(1, 2)).Copy 
    End Sub 

Но я получаю все листы активной книги скопированы в дубликатах файлов. Может ли кто-нибудь помочь мне получить только первые листы активной книги, скопированные в дубликат файла. Я много пробовал, но я не могу получить результат.

ответ

1

Попробуйте это:

Sub DupliquerFeuille(control As IRibbonControl) 

Dim twb As Workbook 
Dim Sourcewb As Workbook 
Const shc As Long = 2 ' change this as you need, this will copy first 2 sheets 

With Application 
    .ScreenUpdating = False 
    .EnableEvents = False 
End With 

Set Sourcewb = ActiveWorkbook 
Sourcewb.Sheets(1).Copy 
Set twb = ActiveWorkbook 

For i = 2 To shc 
Sourcewb.Sheets(i).Copy ,twb.Sheets(twb.Sheets.Count) 
Next 
nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & Sourcewb.Name 
twb.SaveAs Sourcewb.Path & "\" & nom, Sourcewb.FileFormat 
twb.Close False 

With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
End With 

End Sub 
+0

Этот код работает нормально, но в дубликат файла я получаю sheet1 в последний раз. Предположим, что я копирую первые 4 листа, поэтому в дубликат файла я получаю листы порядка 2 - 3 - 4 - 1 –

+0

@RishavTripathi, это скопирует листы в том же порядке в исходном файле. – Fadi

+0

Но в моем случае это не копирование листов в том же порядке –

0

Ниже строки кода найти путь и имя текущего файла Excel, скопировать первые два листа и сохранить новый (дублируется) книги в том же месте, что и основной книги:

Set Sourcewb = ActiveWorkbook 

' Create path and name for export 
PathName = ThisWorkbook.Path & "_export" 

' Copy the sheets so they don't get removed in the main file 
Sheets(Array(1, 2)).Copy Before:=Sheets(1) 

' Move the first two sheets to a new workbook 
Sheets(Array(1, 2)).Move 

' Save the active duplicated workbook 
ActiveWorkbook.SaveAs Filename:=PathName, FileFormat:=Sourcewb.FileFormat 

' Close the active duplicated workbook 
Application.DisplayAlerts = False 
ActiveWorkbook.Close 
Application.DisplayAlerts = True 
+0

Это делает работу, но не Решите мою цель. Я хочу, чтобы дублирующаяся кнопка копировала первые два файла в новый файл и сохраняла их по определенному пути, не открывая этот дублирующий файл. Мне удалось добиться того же результата, что и при перемещении, когда я использовал код «ActiveWorkbook.Sheets (Array (1, 2)). Копировать« –

+0

Я немного смущен, какова текущая проблема? Код, который я предложил, перемещает только подмножество листов в новую книгу, а затем в качестве активной книги вы можете использовать свой существующий код для сохранения этой книги. Я считаю, что эта дублированная книга должна быть открытой во время этого процесса. Вы можете закрыть эту дублированную книгу после использования команды типа «ActiveWorkbook.Close» - это поможет? –

+0

Мне мешает указать местоположение/путь для сохранения дубликата файла. Могу ли я использовать код для автоматического сохранения файла по определенному пути с определенным именем? Я использовал «ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path &» \ «& nom», но его отображающая ошибка –

0

Как насчет добавив лишние строки кода после сохранения новой книги, чтобы удалить те страницы, которые вам не нравятся?

Такие, как

Application.DisplayAlerts = False 
Sheets("Sheet1").Delete 
Application.DisplayAlerts = True 

Заменить "Лист 1" с именем листа (держать кавычки)

+0

oh, и я spose вам придется сэкономить снова – tmit

+0

Существует нет конкретного имени первых двух листов, я хочу сделать его динамическим –

Смежные вопросы