シート「カバーシート」から Sheets.Count にシートの範囲をコピーして新しいワークブックに追加します。

シート「カバーシート」から Sheets.Count にシートの範囲をコピーして新しいワークブックに追加します。

私は「Cover_Sheet」から最終シートまでのすべてのタブを含む「クライアントフレンドリー」バージョンのワークブックを作成しようとしています。ワークブックには「value」シートを複数回コピーするマクロがあり、そのたびに value2、value3 などのように連続的に名前が変更されます。

この機能を使用するには、何枚のシートをコピーする必要があるかわかりませんSheets.Count。ワークブックには表紙と最終値のタブしかありません。

私は以下のものを使用しようとしています:

Sub Activate_Sheet()
    Sheets("Cover_Sheet").Activate
End Sub

Sub ExportExcelWorkbookFinal()
' ----------------------------
' Macro to export the workbook and break the links
' which allows it to be sent on to clients.

    Application.ScreenUpdating = False
    Sheets(Array("Cover_Sheet", Sheets.Count)).Copy
    ActiveSheet.Protect "password"
    Application.ScreenUpdating = True
    Application.GetSaveAsFilename
   
End Sub

答え1

Cover_Sheetsコピーしてを指示しているため、「表紙」タブと「最終値」タブのみが表示されますSheets.Count。は
Sheets.Count、ワークブック内のシート数を返します。
したがって、シートが 5 枚ある場合、コードは次のように指示します。 コピーしてCover_Sheets555 番目のシートとして解釈され、最後のシートになります。

正確に何を意味しているのかよく分かりませんが、他の値タブを作成する別のマクロがあると思います。 からCover_Sheets最後まですべてのシートをコピーする場合は、まずその配列を作成してから、既存の配列を使用することができます。
のインデックスをCover_Sheet開始点として使用し、 まで進みますSheets.Count

Sub ExportExcelWorkbookFinal()
'
' Macro to export the workbook and break the links which allows it to be sent on to clients.

Dim sheetArr As Variant
sheetArr = Evaluate("TRANSPOSE(Row(" & Application.Sheets("Cover_Sheet").Index & ":" & Sheets.Count & "))")

Application.ScreenUpdating = False
    Sheets(sheetArr).Copy
    ActiveSheet.Protect "password"
    Application.ScreenUpdating = True
    Application.GetSaveAsFilename
   
End Sub

ただし、この方法では、新しいワークブックの最初のシートである Cover_Sheet にのみパスワードが設定されます。問題かどうかはわかりません。問題がある場合は、ActiveSheet.Protect "password"次のコードに置き換えてください。

For Each wsheet In ActiveWorkbook.Worksheets
    wsheet.Protect Password:="password"
Next wsheet

ループを使用して、より「通常の」方法で配列を埋めることもできますが、この 1 行のアプローチは興味深いと思います。

Dim i As Long, sheetArr() As Variant
ReDim sheetArr(Application.Sheets("Cover_Sheet").Index To Sheets.Count)
For i = LBound(sheetArr) To UBound(sheetArr)
    sheetArr(i) = i
Next

関連情報