3

次の関数を使用して、ワークシートをワークブックから保存し、別のワークブックに保存しています。ただし、数式を保存していますが、値だけが最終的なワークブックになることを望みます。結果のワークブックに数式が含まれず、値のみが含まれるようにするにはどうすればよいですか?

Sub Sheet_SaveAs(FilePath As String, SheetToSave As Worksheet)
    Dim wb As Workbook

    Set wb = Workbooks.Add(xlWBATWorksheet)
    With wb
        SheetToSave.Copy After:=.Worksheets(.Worksheets.Count)
        Application.DisplayAlerts = False
        .Worksheets(1).Delete
        Application.DisplayAlerts = True
        .SaveAs FilePath
        .Close False
    End With

End Sub

親切に提供されたリンクを使用してこれを試しましたが、役に立ちませんでした:

Sub Sheet_SaveAs(FilePath As String, SheetToSave As Worksheet)
    Dim wb As Workbook

    Set wb = Workbooks.Add(xlWBATWorksheet)
    With wb
        SheetToSave.Copy After:=.Worksheets(.Worksheets.Count)
        Application.DisplayAlerts = False
        .Worksheets(1).Delete
        .Worksheets(1).Copy
        .Worksheets(1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.DisplayAlerts = True
        .SaveAs FilePath
        .Close False
    End With

End Sub

しかし、pastespecial 行でエラーが発生しますか??

4

3 に答える 3

2

値をコピーする最も簡単な方法は、次の 2 つの手順で行うことです。
シートをコピーし、数式をその値に置き換えます 。

後:

.Worksheets(1).Delete

元のコードに次の行を追加します。

With Range(Worksheets(.Worksheets.Count).UsedRange.Address)
    .Value = .Value
End With

すべての.value=.value値を現在表示されている値に置き換えるようにExcelに指示しているため、すべての数式は計算された値に置き換えられます

于 2013-07-29T13:00:04.610 に答える
2
.Worksheets(1).Copy

これはシート自体をコピーするものであり、 とは関係ありませんPasteSpecial。あなたが使用することができます:

.Worksheets(1).UsedRange.Copy

または類似。たとえば、Worksheets(1).Cells.Copy.

私はそれがあるべきだと思いWorksheets(.Worksheets.Count)ます。

以下SpecialCellsでは、ワークシート内の数式のみを識別するために使用し、rng.Value = rng.Valueこれらを数式の結果に変換するように設定しています。

Sub Sheet_SaveAs(FilePath As String, SheetToSave As Worksheet)
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rngFormulas As Range, rng As Range

    Set wb = Workbooks.Add(xlWBATWorksheet)
    With wb
        SheetToSave.Copy After:=.Worksheets(.Worksheets.Count)
        Set ws = .Worksheets(.Worksheets.Count)
        Application.DisplayAlerts = False
        .Worksheets(1).Delete
        Application.DisplayAlerts = True

        With ws
            Set rngFormulas = ws.Cells.SpecialCells(xlCellTypeFormulas)
            For Each rng In rngFormulas
                rng.Value = rng.Value
            Next rng
        End With

        .SaveAs FilePath
        .Close False
    End With
End Sub

コピーしたワークシートに数式がない場合に対処するために、エラー処理コードを追加する必要があります。(配列数式も考慮する必要がある場合があります。)

于 2013-07-29T12:31:28.953 に答える