3
this forumのコードは、私が出発点として使用したものです。私は、複数のシートをコピーして、それらをすべて1つのシートではなく値として貼り付けるように修正しようとしています。新しいブックに値として複数のシートを貼り付けるようにVBAを編集
worksheets(array(1,2,3)).copy
を使用して複数のシートをコピーしました。私は問題がWith ActiveSheet.UsedRange
だと思います。なぜなら、最初のシートを値として置き換えて残りのシートを数式として残しているからです。
すべてのシートを値として貼り付けるには、何を変更する必要がありますか?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Worksheets(Array("Sheet 1","Sheet 2","Sheet 3").Copy
With ActiveSheet.UsedRange
.Value = .Value
End With
Set wbNew = ActiveWorkbook
wbNew.SaveAs "L:\Performance Data\UK Sales\Sales (Latest).xlsx"
wbNew.Close True
Application.DisplayAlerts = True
End Sub
ありがとうございます。 あなたが言ったように**コピーされた**ブックに値を貼り付けようとしています。元のブックはすべての数式を保持する必要があります。 しかし、私はこのコードを試したときに、元のシートに値を貼り付け、ループ中にメモリ不足になりました。ループの数を制限する方法はありますか? – tenvfa
@tenvfa - 更新されたコードを参照してください。それは動作しますか?メモリが不足している場合は、 'UsedRange'のサイズを確認することができます。どのくらいの大きさになると思いますか? – BruceWayne
あなたの編集で、新しいワークブックのみに値をコピーする問題が修正されました。ありがとうございます。 もう一度メモリ不足になり、デバッガは 'wbNew.Worksheets(shts(i))のフラグを立てます。UsedRange.Value = wbNew.Worksheets(shts(i))。UsedRange.Value'をエラーとして返します。私はコーディング経験のないVBAの初心者ですので、あなたのサイズについてのご質問が分かりません。 最大のシートには、15列×25,000行のセル値が含まれています。最小のシートは15列×2,000列です。 – tenvfa