Вот еще один подход, который дает вам некоторую гибкость, устанавливая имя файла и путь в переменных.
Также некоторые полезные практики:
- Установите переменные на что-то понятное
- Объявите все ваши переменные
- Вверху ваших модулей поместите
Option Explicit
, поэтому требуется объявление переменной - Отступ в коде
РЕДАКТИРОВАТЬ: Добавлено сохранить тот же порядок листов, как в исходной книге и удалить дополнительные листы
Код:
Option Explicit
Public Sub ConvertFormulasToValuesAllWorksheets()
Dim newBook As Workbook
Dim sourceSheet As Worksheet
Dim targetSheet As Worksheet
Dim filePath As String
Dim fileName As String
Dim fileFullPath As String
On Error GoTo CleanFail
Application.DisplayAlerts = False
' Build the path
filePath = "C:\Temp\" ' "C:\Users\myusid\Desktop\myfolder\"
fileName = "workbook2.xlsx"
fileFullPath = filePath & fileName
' Add a new workbook
Set newBook = Workbooks.Add
' Save it with the path built
newBook.SaveAs fileName:=fileFullPath ', FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
For Each sourceSheet In ThisWorkbook.Sheets
' Copy the sheet
sourceSheet.Copy After:=Workbooks(fileName).Sheets(sourceSheet.Index)
Set targetSheet = newBook.Worksheets(sourceSheet.Name)
' Copy/paste values
targetSheet.UsedRange.Value = sourceSheet.UsedRange.Value
Next sourceSheet
' Delete other sheets
For Each targetSheet In newBook.Worksheets
If Not WorksheetExists(targetSheet.Name, ThisWorkbook) Then
targetSheet.Delete
End If
Next targetSheet
CleanExit:
Application.DisplayAlerts = True
Exit Sub
CleanFail:
MsgBox Err.Description
GoTo CleanExit
End Sub
Private Function WorksheetExists(sheetName As String, targetBook As Workbook) As Boolean
Dim evalSheet As Worksheet
On Error Resume Next
Set evalSheet = targetBook.Sheets(sheetName)
On Error GoTo 0
WorksheetExists = Not (evalSheet Is Nothing)
End Function
Дайте мне знать, если это работает.