2017-11-16 5 views
-1

以下のコードは、すべてのシートを自動化ファイルに保存する必要があります。なぜ、ファイル全体を何度も何度も保存するのはなぜですか(i)単純に強調表示されていますか?VBAコードが個々のシートを保存しないのはなぜですか?

Sub Splitbook() 
     MyPath = ThisWorkbook.Path 
       For i = 1 To Worksheets.Count 
       Sheets(i).Activate 
       Sheets(i).SaveAs _ 
         Filename:=MyPath & "\" & Sheets(i).Name & ".xlsx" 
         'ActiveWorkbook.Close savechanges:=False 

     Next i 
    End Sub 
+3

保存シートを保存すると、ブックが保存されます。 – braX

+1

新しいブックを作成するためにコピーする必要があるシートだけを保存する場合は、そのブックを保存します。 –

答えて

3

@braXとして - 各シートは新しいブックに保存されます。
@TimWilliams氏によると、各シートは保存する前に新しいブックにコピーする必要があります。

ThisWorkbookは、VBAコードを含むファイルです。
ワークシートを新しいファイルにコピーすると、新しいファイルがアクティブなワークブックになります。そのように参照することができます(Set wrkBk = wrkSht.Copyと書くことができれば大丈夫ですが、VBAではそのようにはなりません)。

新しいファイルへの参照を取得したら、シート名を使用してファイルを保存できます。シート名が実行可能なファイル名であることを保証するコードを追加できます。

Public Sub SplitWorkbook() 

    Dim wrkSht As Worksheet 
    Dim wrkBk As Workbook 

    For Each wrkSht In ThisWorkbook.Worksheets 
     wrkSht.Copy 
     Set wrkBk = ActiveWorkbook 
     'Save the new file without closing. 
     'wrkBk.SaveAs ThisWorkbook.Path & "\" & wrkBk.Worksheets(1).Name 

     'Save the new file and close. 
     wrkBk.Close True, ThisWorkbook.Path & "\" & wrkBk.Worksheets(1).Name 
    Next wrkSht 

End Sub 
+0

これは部分的にしか動作しません。このサブの前に書いたコードはもう動かないので、最終的にシートを生の形で分割します。私が必要とするのは、xlsxファイルに作用する外部マクロです。 –

+0

更新:私が持っていた間違いを発見しました。レポートのマクロでも機能します。私はちょうど最初のシートをアクティブにするのを忘れた:-) –

関連する問題