web-dev-qa-db-ja.com

Excel 2010でワークシート全体を新しいワークシートにコピーする

あるワークブックのワークシート全体をコピーして別のワークブックに貼り付けることに関する同様の質問を見つけましたが、単に同じワークブックでワークシート全体をコピーして新しいワークシートに貼り付けることに興味があります。

2003 .xlsファイルを2010 .xlsmに変換中です。ワークシート間のコピーと貼り付けに使用される古い方法では、正しい行の高さで貼り付けられません。私の最初の回避策は、各行をループし、コピー元のワークシートから行の高さを取得してから、貼り付けているワークシートの行の高さの値をループして挿入することでしたが、このアプローチの問題はシートには、行の番号付けを変更する新しい行を生成するボタンが含まれており、シートの形式は、すべての行を1つの幅だけにすることはできません。

ワークシート全体を単にコピーして貼り付けるだけです。 2003バージョンのコードは次のとおりです。

ThisWorkbook.Worksheets("Master").Cells.Copy
newWorksheet.Paste

.xlsmへの変換が原因でこれが壊れていることに驚いています。どんな提案やアイデアも素晴らしいでしょう。

23
winnicki

以下のような正確なコピーを実行して、最後のシートとしてコピーを配置する方が簡単です

Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub
36
brettdj
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"
8
thanos.a

@brettdjのコードが本当に好きでしたが、コピーを編集するためのコードを追加すると、代わりに元のシートが上書きされることがわかりました。彼の答えを微調整して、ws1を指すコードが元のシートではなく新しいシートに影響するようにしました。

Sub Test()
    Dim ws1 as Worksheet
    ThisWorkbook.Worksheets("Master").Copy
    Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub
2
S M Perron
'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
1
shanxiang shen

誰かが、私のように、デフォルトの数の表示価格シート、要約、および機密データでいっぱいの隠された「保護された」ワークシートを多数含む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

サブ終了

0
Maccus