2

Excel 2010を使用して次の機能があります。

Private Function MakeAllSheetsValuesOnly(targetBookName As String)

If Excel.ActiveWorkbook.Name = Excel.ThisWorkbook.Name Then
Else

        Excel.Workbooks(targetBookName).Activate

        Dim mySheet
        For Each mySheet In Excel.ActiveWorkbook.Sheets
                    With mySheet
                                With .Cells
                                            .Copy
                                            .PasteSpecial Excel.xlPasteValues
                                End With
                                .Select
                                .Range("A1").Select
                    End With
                    Excel.ActiveWindow.SmallScroll Down:=-200
                    Excel.Application.CutCopyMode = False
        Next mySheet
End If

End Function                        'MakeAllSheetsValuesOnly

それは機能しますが、クリップボードに頼りたくないのですが、すべてのシートの値のみを作成する別の方法はありますか?

このトピックに関連する別のプログラムで使用している代替ロジックを見つけました:

Dim rSource As Range
Dim rDest As Range

Set rSource = .Range("C5:BG" & .Range("B4").Value + 4)   
Set rDest = mySummaryBook.Sheets("Data_Measures").Cells(Rows.Count, 4).End(xlUp)(2, 1)
    With rSource
          Set rDest = rDest.Resize(.Rows.Count, .Columns.Count)
    End With
    rDest.Value = rSource.Value
Set rSource = Nothing
Set rDest = Nothing
4

3 に答える 3

11

多分このようなもの:

With mySheet.UsedRange
    .Value = .Value
End With
于 2012-06-19T17:08:36.703 に答える
1

上記のティムの回答に基づいて構築すると、これが最も効率的な方法であると思われますが、コードをクリーンアップして、コードを少し高速化し、リソースの消費を抑えることができます。下記参照。大きな変更はありませんが、それでも処理に役立ちます。まず関数は必要ありません。サブはやります。多くのものを選択して有効にする必要はありません:

Private Sub MakeAllSheetsValuesOnly(targetBookName As String)

If ActiveWorkbook.Name <> ThisWorkbook.Name Then

        Dim wkb As Workbook
        Set wkb = Workbooks(targetBookName)

        With wkb
            Dim mySheet As Worksheet
            For Each mySheet In wkb.Worksheets
                mySheet.UsedRange.Value = mySheet.UsedRange.Value
            Next mySheet
        End With
End If

End Sub 'MakeAllSheetsValuesOnly
于 2012-06-19T17:08:12.633 に答える
1

これには関数は必要ありません。

ティムはすでに素晴らしい方法を教えてくれています。ここに別の方法があります...

Sub Sample()
    MakeAllSheetsValuesOnly "Book2"
End Sub

Private Sub MakeAllSheetsValuesOnly(targetBookName As String)
    Dim mySheet As Worksheet
    Dim formulaCell As Range
    Dim aCell As Range

    Application.ScreenUpdating = False

    For Each mySheet In Workbooks(targetBookName).Sheets
        On Error Resume Next
        Set formulaCell = mySheet.Cells.SpecialCells(xlCellTypeFormulas)
        On Error GoTo 0

        If Not formulaCell Is Nothing Then
            For Each aCell In formulaCell
                aCell.Value = aCell.Value
            Next
        End If
    Next mySheet

    Application.ScreenUpdating = True
End Sub
于 2012-06-19T17:15:42.547 に答える