Сохранить лист как значения во внешнем файле - PullRequest
0 голосов
/ 25 июня 2019

У меня есть рабочая тетрадь на 6 листов.Я хочу сохранить значения (не формулы) листов 1 и 2 во внешних файлах.

Попробовал это:

Worksheets("Sheet1").Copy
With ActiveWorkbook
.SaveAs Filename:="D:\sheet1.xls", FileFormat:=56, CreateBackup:=False
End With

Worksheets("Sheet2").Copy
With ActiveWorkbook
.SaveAs Filename:="D:\sheet2.xls", FileFormat:=56, CreateBackup:=False
End With

Это работает.Но:

  1. Сохраняет формулы, а не их значения.

  2. Если файл существует, выведите сообщение с вопросом, хотите ли вы переопределить

Ответы [ 2 ]

3 голосов
/ 25 июня 2019

Вам нужно будет самостоятельно преобразовать формулы в значения. Сделайте что-то вроде следующего:

ThisWorkbook.Worksheets("Sheet1").Copy 'create a copy in a new workbook

Dim wb As Workbook
Set wb = ActiveWorkbook 'get the new workbook

'change formulas into values
wb.Worksheets(1).UsedRange.Value = wb.Worksheets(1).UsedRange.Value

'save
wb.SaveAs Filename:="D:\sheet1.xls", FileFormat:=56, CreateBackup:=False

'close it
wb.Close SaveChanges:=False

Если вы хотите избавиться от вопроса перезаписи, проверьте, существует ли файл D:\sheet1.xls alrady, и уничтожьте его, прежде чем сохранить. Я не объясняю это подробно, потому что для этого уже есть миллион учебников.


Улучшение

Используйте процедуру для повторного использования вашего кода:

Public Sub ExportWorksheet(ByVal SheetName As String, ByVal ExportToFile As String)
    ThisWorkbook.Worksheets(SheetName).Copy 

    Dim wb As Workbook
    Set wb = ActiveWorkbook

    wb.Worksheets(1).UsedRange.Value = wb.Worksheets(1).UsedRange.Value

    If Dir(ExportToFile) <> vbNullString Then Kill ExportToFile
    wb.SaveAs Filename:=ExportToFile, FileFormat:=56, CreateBackup:=False

    wb.Close SaveChanges:=False
End Sub

Sub TestIt()
    ExportWorksheet SheetName:="Sheet1" ExportToFile:="D:\sheet1.xls"
    ExportWorksheet SheetName:="Sheet2" ExportToFile:="D:\sheet2.xls"
End Sub

Обратите внимание: всякий раз, когда вам кажется, что вам нужно скопировать код, разбивайте его на отдельные процедуры, чтобы избежать избыточности.

1 голос
/ 25 июня 2019

Небольшой пример, который может помочь: Option Explicit

Sub test()

    Dim wsSou As Worksheet, wsDes As Worksheet

    With ThisWorkbook

        Set wsSou = .Worksheets("Sheet1")
        Set wsDes = .Worksheets("Sheet2")

        'Copy Paste - ONLY Values
        wsSou.UsedRange.Copy
        wsDes.Range("A1").PasteSpecial xlPasteValues

        'Copy Paste - Values and Formattings
        wsSou.UsedRange.Copy wsDes.Range("A1")

    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...