-1

1 つの変数に対してすべての計算を実行するワークブックを作成して、増加するたびにその特定の番号で保存したい新しいファイルを生成するようにしました。ここでは、同じプロセスを手動で何度も実行しないように、VBA の手順を記述しました。メインファイルを開いて番号を1増やし、それを閉じてから、新しいファイルをその名前で保存し、新しいファイルを閉じてメインファイルを開くなどで正常に機能します。ここで、メインファイルを開いたり閉じたりすると、かなりの時間がかかります。それを見て、メインファイルを開いたままにし、新しく生成されたファイルを無差別に保存する方法を教えてください。または、このロジック以外の場合は、時間がかかりません。

前もって感謝します。

Sub AsBuiltForm()

a = InputBox("Enter first number")
b = InputBox("Enter last number")

For i = a - 1 To b - 1 

Application.DisplayAlerts = False

Workbooks.Open Filename:="C:\SA.xlsx"  'main file

Range("bi1") = i + 1

Dim SaveName As Integer

SaveName = ActiveWorkbook.Sheets(1).Range("bi1").value

Sheets("1 of 2").Range("A1:CT103").value = Sheets("1 of 2").Range("A1:CT103").value

Sheets("2 of 2").Range("A1:CT103").value = Sheets("2 of 2").Range("A1:CT103").value

Application.ActiveWorkbook.SaveAs "C:\Desktop\SA\" & SaveName

Sheets("GL").Select
ActiveWindow.SelectedSheets.Delete

Sheets("SA").Select
ActiveWindow.SelectedSheets.Delete

ActiveWorkbook.Close True

Next

End Sub
4

2 に答える 2

0

これは少し速いかもしれません(テストされていないので、問題があれば投稿してください)

メイン ワークブックに多くの数式がある場合は、次の使用を検討してください。

Excel.Application.Calculation = xlCalculationManual

次に、保存する前に任意の時点で計算する必要がある場合は、次の行を使用します。

Excel.Application.Calculate

このプロパティの変更は持続するため、次の作業を忘れずに完了してください。

Excel.Application.Calculation = xlCalculationAutomatic

 Sub AsBuiltForm()

    Dim SaveName As String
    Dim mainBook As Workbook

    a = InputBox("Enter first number")
    b = InputBox("Enter last number")

    Workbooks.Open Filename:="C:\SA.xlsx"  'main file
    Set mainBook = Excel.Workbooks("SA.xlsx")

        For i = a - 1 To b - 1

            mainBook.Sheets(1).Range("BI1") = i + 1
            SaveName = mainBook.Sheets(1).Range("BI1") & ".xlsx"

            mainBook.SaveCopyAs "C:\Desktop\SA\" & SaveName
            Workbooks.Open Filename:="C:\Desktop\SA\" & SaveName

            With Excel.ActiveWorkbook
                .Sheets("1 of 2").Range("A1:CT103").Value = Sheets("1 of 2").Range("A1:CT103").Value
                .Sheets("2 of 2").Range("A1:CT103").Value = Sheets("2 of 2").Range("A1:CT103").Value
                Excel.Application.DisplayAlerts = False
                .Sheets("GL").Delete
                .Sheets("SA").Delete
                .Close True
            End With

        Next

    mainBook.Close False
    Set mainBook = Nothing

End Sub
于 2012-10-06T15:51:17.997 に答える
0

メイン ファイルは次の方法で元に戻せないほど変更されているため、次の操作を行います。 1. 値を貼り付けます。2. シートの削除。再度開くことで、他のオプションはありません。

ただし、ここに別の方法があります。GA と SA は、値を貼り付けた後に不要になった「数式」シートであると想定しています。1. 新しいワークブックを作成します。2. 残したいシートを重ねてコピーします。

こうすることで、メインのワークブックに手を加えることなく、それを再利用して後続のワークブックを作成できます。

于 2012-10-06T15:01:14.957 に答える