あるワークブックのワークシート全体をコピーして別のワークブックに貼り付けることに関する同様の質問を見つけましたが、単に同じワークブックでワークシート全体をコピーして新しいワークシートに貼り付けることに興味があります。
2003 .xlsファイルを2010 .xlsmに変換中です。ワークシート間のコピーと貼り付けに使用される古い方法では、正しい行の高さで貼り付けられません。私の最初の回避策は、各行をループし、コピー元のワークシートから行の高さを取得してから、貼り付けているワークシートの行の高さの値をループして挿入することでしたが、このアプローチの問題はシートには、行の番号付けを変更する新しい行を生成するボタンが含まれており、シートの形式は、すべての行を1つの幅だけにすることはできません。
ワークシート全体を単にコピーして貼り付けるだけです。 2003バージョンのコードは次のとおりです。
ThisWorkbook.Worksheets("Master").Cells.Copy
newWorksheet.Paste
.xlsmへの変換が原因でこれが壊れていることに驚いています。どんな提案やアイデアも素晴らしいでしょう。
以下のような正確なコピーを実行して、最後のシートとしてコピーを配置する方が簡単です
Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub
ThisWorkbook.Worksheets("Master").Sheet1.Cells.Copy _
Destination:=newWorksheet.Cells
上記はセルをコピーします。シート全体を複製する場合は、 @ brettdj's answer を使用します。
' Assume that the code name the worksheet is Sheet1
' Copy the sheet using code name and put in the end.
' Note: Using the code name lets the user rename the worksheet without breaking the VBA code
Sheet1.Copy After:=Sheets(Sheets.Count)
' Rename the copied sheet keeping the same name and appending a string " copied"
ActiveSheet.Name = Sheet1.Name & " copied"
@brettdjのコードが本当に好きでしたが、コピーを編集するためのコードを追加すると、代わりに元のシートが上書きされることがわかりました。彼の答えを微調整して、ws1
を指すコードが元のシートではなく新しいシートに影響するようにしました。
Sub Test()
Dim ws1 as Worksheet
ThisWorkbook.Worksheets("Master").Copy
Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub
'Make the Excel file that runs the software the active workbook
ThisWorkbook.Activate
'The first sheet used as a temporary place to hold the data
ThisWorkbook.Worksheets(1).Cells.Copy
'Create a new Excel workbook
Dim NewCaseFile As Workbook
Dim strFileName As String
Set NewCaseFile = Workbooks.Add
With NewCaseFile
Sheets(1).Select
Cells(1, 1).Select
End With
ActiveSheet.Paste
誰かが、私のように、デフォルトの数の表示価格シート、要約、および機密データでいっぱいの隠された「保護された」ワークシートを多数含むEstimatingワークブックを持っているが、価格、保護された隠された「マスター」に基づいて、上記の可視ワークシートを作成する上記の応答のバリアントがあります。以下に示すように、@/jean-fran%c3%a7ois-corbettと@ thanos-aによって提供されるコードを単純なVBAと組み合わせて使用しました。
Sub sbInsertWorksheetAfter()
'This adds a new visible worksheet after the last visible worksheet
ThisWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
'This copies the content of the HIDDEN "Master" worksheet to the new VISIBLE ActiveSheet just created
ThisWorkbook.Sheets("Master").Cells.Copy _
Destination:=ActiveSheet.Cells
'This gives the the new ActiveSheet a default name
With ActiveSheet
.Name = Sheet12.Name & " copied"
End With
'This changes the name of the ActiveSheet to the user's preference
Dim sheetname As String
With ActiveSheet
sheetname = InputBox("Enter name of this Worksheet")
.Name = sheetname
End With
サブ終了