1

我有一个模板工作簿 (Temp_TS),用于创建新文件(基于另一个模板),然后希望针对新文件运行 Temp_TS 中包含的 vba 代码。由于所有 VBA 都包含在 Temp_TS 中,我如何指定应该对我创建的新文件执行此操作?

我将对新文件运行的过程之一的示例如下所示:

Sub DelSheets(Optional p_sheet_to_keep1 As String = "xxx", _
              Optional p_sheet_to_keep2 As String = "yyy", _
              Optional p_sheet_to_keep3 As String = "zzz")
On Error GoTo DelSheets_err
    ' e.g. call gen.DelSheets("Parameters", "Chris Prosser")
    Dim ws As Worksheet
    Application.DisplayAlerts = False

    For Each ws In Worksheets
        If LCase(ws.Name) <> LCase(p_sheet_to_keep1) And _
           LCase(ws.Name) <> LCase(p_sheet_to_keep2) And _
           LCase(ws.Name) <> LCase(p_sheet_to_keep3) Then
            ws.Delete
        End If
    Next
    Application.DisplayAlerts = True

DelSheets_exit:
    Exit Sub

DelSheets_err:
    Debug.Print "Error: ", Err.Number, vbCrLf, Err.Description
    Resume Next
End Sub

要针对当前工作簿执行此操作,我只需执行以下操作:

gen.DelSheets("Parameters", "Chris Prosser")

我将如何指定我希望它针对新工作簿而不是当前工作簿执行?

编辑

如果它对这里的任何人有帮助,那就是用于创建新工作表的方法:

strCommand = "cp """ & oldFileName & """ """ & newFileName & """"
Shell strCommand, 1

这部分工作正常,文件已创建但尚未打开。

4

1 回答 1

2

修改您的DelSheet子以接受工作簿作为参数(发送它byRef

然后添加wb.Worksheets你的 delSheet

现在你可以Main像这样从 sub调用它

Sub Main()

    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\Users\...\Desktop\file1234.xlsm")

    DelSheets (wb)

    wb.Save
    wb.Saved = True
    wb.Close
    Set wb = Nothing

End Sub


Sub DelSheets(ByRef wb As Workbook, Optional p_sheet_to_keep1 As String = "xxx", _
              Optional p_sheet_to_keep2 As String = "yyy", _
              Optional p_sheet_to_keep3 As String = "zzz")
On Error GoTo DelSheets_err
    ' e.g. call gen.DelSheets("Parameters", "Chris Prosser")
    Dim ws As Worksheet
    Application.DisplayAlerts = False

    For Each ws In wb.Worksheets
        If LCase(ws.Name) <> LCase(p_sheet_to_keep1) And _
           LCase(ws.Name) <> LCase(p_sheet_to_keep2) And _
           LCase(ws.Name) <> LCase(p_sheet_to_keep3) Then
            ws.Delete
        End If
    Next
    Application.DisplayAlerts = True

DelSheets_exit:
    Exit Sub

DelSheets_err:
    Debug.Print "Error: ", Err.Number, vbCrLf, Err.Description
    Resume Next
End Sub
于 2013-09-03T12:03:50.530 回答