2017-08-31 5 views
0

ワークブック内のすべてのセルを数式から値に変換する必要があります。 これは私が下記のコードを使用したかったのですが、小規模なファイルでも機能しましたが、260のワークシートを持つファイルに使用すると、xlPasteValuesに「エラー1004」が表示されます。VBA:260のワークシートを含むファイルの式に値を変換する

Sub Formula_Zapper() 
Worksheets.Select 
Cells.Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues 
ActiveSheet.Select 
Application.CutCopyMode = False 
End Sub 

誰も私が大きなファイルのためにうまくいかない理由と私はこれを回避することができますか?

ワークシートの数を減らして複数のラウンドを実行することで回避しようとしましたが、このラウンドで選択したいワークシートを手動で追加する手動配列を作成したくないという問題があります。

Forループを使用してもう一方のワークシートを選択しようとしましたが、しようとするとPCがクラッシュしました。 VBAにワークシート1〜50を同時に選択させる方法はありますか?

ご協力いただきありがとうございます。私は本当にここで迷っています。ここで

+0

を使用していない別の方法ですか?彼らはすべて同じ範囲を満たしていますか?そうであれば、より小さな範囲を選択するループを作ることができます。また、特定の範囲を使用する場合は、このようなことを行うことによってselectメソッドとcopyメソッドを使用することを避けることができます。 'range'が同じではないが、単純に定義するのが簡単な場合は 'sheets(1).range( "A1:D30")。 VBAコードでは、各シートの使用範囲でシートをループし、前述のコードを使用して値に変換することができます。 – Jarom

+0

ワークシートは常に同じように見えますが、おそらく2000x2000セルの範囲のデータを持っています。ファイルはちょうど巨大なので、ファイルをループするときに私のPCがクラッシュするだけです。私が.valueメソッドを試してみたところ、何らかの理由でExcelが "0"でいくつかの行を埋めました。どうしてか分かりません。 .valueメソッドを使用して – Yarza

+0

がクラッシュしましたか?それとも0で線を埋める唯一の問題でしたか? – Jarom

答えて

1

は、ワークシートは次のようになりますどのようなRange.Copy

Sub ReplaceFormulaeWithValues() 
    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 
    Dim ws As Worksheet 

    For Each ws In ThisWorkbook 
     ws.UsedRange.Value = ws.UsedRange.Value 
    Next 

    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
End Sub 
+0

素敵なトーマス!! – ryguy72

関連する問題