2017-08-13 64 views
0

我正在從一個工作簿(即wb1.xlsm)運行一個宏,該工作簿將模板工作簿複製到另一個位置並重命名它(即.wb2.xlsm)。然後它使用Application.Run運行位於wb2中的AutoSetup()子。這將根據其給定的參數創建適當的工作表。從VBA中的另一個宏調用時阻止UserForm可見

我的問題發生在這個過程中。它使用用戶窗體中出現的現有功能進行設置。

當我運行宏時,我不想看到任何東西彈出,但即使將Application.Events和Application.Visible設置爲False執行設置計算的UserForm仍會彈出並顯示。

有什麼建議嗎?下面

代碼:

'AutoSetup Module 
Public Sub AutoSetup(Project As String, Program As String, TestName As String, _ 
        TestType As String, TaskNumber As String, Token As String) 
    Dim TokenArr() As String 

    Application.ScreenUpdating = False 
    Application.EnableEvents = False 
    Set IntSht = ActiveWorkbook.Sheets("Integrations") 
    Set DctSht = ActiveWorkbook.Sheets("Duct") 
    IntSht.Range("B4").value = Program 
    IntSht.Range("B5").value = TestName 
    IntSht.Range("E4").value = Project 
    IntSht.Range("E5").value = TaskNumber 
    Call WorkbookSetup 
    MenuForm.TestSetBox.value = TestType 
    TokenArr = Split(Base64DecodeString(Token), ",") 
    EPFLogin.TextBox1.value = TokenArr(0) 
    EPFLogin.TextBox2.value = TokenArr(1) 
    MenuForm.LoadSheets (True) 
    DctSht.Activate 
    ThisWorkbook.Save 
    ThisWorkbook.Close 
End Sub 
+0

爲什麼有一個用戶表單?它是否允許在計算中進行一些更改?你可以發佈你的代碼AutoSetup(),所以我們可以看到發生了什麼? – Mitch

+0

您是否有權利(技術上和您的組織)更新模板? –

+0

UserForm(MenuForm)用於手動設置。本質上,我通過發送用戶輸入的參數然後模擬點擊事件來自動執行手動設置過程。 –

回答

1

wb2.xlsm,移動計算到一個單獨的Sub程序在一個單獨的模塊。在顯示UserForm之後,從「AutoSetup」中調用該子程序。

然後從wb1.xlsm調用新的子程序。

+0

我想在AutoSetup期間完全避免顯示UserForm。所以你的建議是從模塊而不是表單執行所有的子程序。 這是我所設想的,但我希望事實並非如此。 –

+0

@StevenGood建議將用於執行計算的代碼部分從UserForm移到更明智的位置。然後UserForm(當它顯示時)可以調用這些計算(傳遞任何必要的參數),並且你的宏(**沒有必須顯示UserForm)也可以調用這些計算(傳遞任何必要的參數)。如果表單的代碼只包含與表單本身相關的代碼,通常是最好的。 – YowE3K