簡體   English   中英

如何針對另一個工作簿在當前工作簿中執行vba過程

[英]How to execute a vba procedure in your current workbook against another workbook

我有一個模板工作簿(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

這部分工作正常,文件已創建但尚未打開。

修改您的DelSheet子項,以接受工作簿作為參數(由byRef發送)

然后加入wb.Worksheets在delSheet

現在您可以像這樣從Main子目錄中調用它

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM