-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 回答