2017-08-13 2 views
0

Je cours une macro à partir d'un classeur (par exemple, wb1.xlsm) qui copie un classeur de modèle dans un autre emplacement et le renomme (par exemple wb2.xlsm). Il utilise ensuite Application.Run pour exécuter un AutoSetup() Sub situé dans wb2. Cela crée les feuilles appropriées en fonction des paramètres donnés.Empêche UserForm d'être visible lorsqu'il est appelé à partir d'une autre macro dans VBA

Mon problème se produit pendant ce processus. Il est configuré en utilisant des fonctions existantes qui se produisent dans un objet UserForm.

Lorsque je lance la macro, je ne veux rien voir apparaître, mais même avec Application.Events et Application.Visible défini sur False L'UserForm qui effectue le calcul d'installation apparaît toujours et est visible.

Des suggestions?

code ci-dessous:

'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

Pourquoi existe-t-il une forme d'utilisateur? Cela permet-il un changement dans le calcul? Pouvez-vous poster votre code pour AutoSetup(), afin que nous puissions voir ce qui se passe? – Mitch

+0

Avez-vous les droits (techniquement et dans votre organisation) pour mettre à jour le modèle? –

+0

UserForm (MenuForm) est utilisé pour la configuration manuelle. Essentiellement, j'automatise le processus de configuration manuelle en envoyant les paramètres qu'un utilisateur entrerait et en simulant ensuite l'événement click. –

Répondre

1

Dans wb2.xlsm, déplacez les calculs à une routine Sub séparée dans un module distinct. Appelez ce sous-programme à partir de 'AutoSetup' après avoir affiché le UserForm.

Ensuite, à partir de wb1.xlsm, appelez le nouveau sous-programme.

+0

Je souhaite éviter d'afficher l'objet UserForm lors de l'installation automatique. Donc, votre suggestion serait d'exécuter toutes les sous-routines d'un module au lieu d'un formulaire. C'est un peu ce que j'ai supposé, mais j'espérais que ce n'était pas le cas. –

+0

@StevenGood La suggestion consiste à déplacer la partie du code qui effectue les calculs hors de l'objet UserForm vers un emplacement plus sensible. Ensuite, l'UserForm (quand il est affiché) peut appeler ces calculs (en passant tous les paramètres nécessaires), et votre macro (** sans ** avoir à afficher l'UserForm) peut également appeler ces calculs (en passant tous les paramètres nécessaires). Il est généralement préférable que le code d'un formulaire inclue uniquement le code associé au formulaire lui-même. – YowE3K