Appelez un formulaire UserForm à partir du module pour afficher le graphique pop-up et returnnez au même endroit dans le module

J'ai un programme VBA qui exécute une requête pour extraire des données d'une database oracle et la placer dans une feuille de calcul Excel et créer un file .txt en sortie qui est utilisé pour être téléchargé dans un autre logiciel.

J'essaie de faire une étape intermédiaire entre l'extraction des données et la création du file de sortie qui permet à l'user de "vérifier à nouveau" que datatables allant au file de sortie sont correctes. J'essaie de créer un formulaire user qui affiche un tableau local qui permet à l'user d'accepter ou de refuser de créer un file de sortie. Vous findez ci-dessous une copy de base de mon code VBA où la macro pour extraire datatables est appelée puis le file de sortie est créé. Comment puis-je accéder au formulaire user, puis revenir au même endroit dans le module pour continuer le programme?

Public Sub OutputSurveyFile() 'Call appropriate macro to run the query to get data needed to be exported to file Call qry_DirSurveyRpt 'Set worksheet to the sheet activated by calling query macro Set wsData = ActiveSheet 'Determine last row and column of data With wsData LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column End With 'Store worksheet data to range Set rngData = wsData.Range(Cells(1, 1), Cells(LastRow, LastCol)) 'Store range of data to array vData = rngData 'Output desired data to text file and format accordingly For i = LBound(vData, 1) To UBound(vData, 1) If i <> 1 Then 'Unique well name call If vData(i, 1) <> vData(i - 1, 1) Then '********GO TO USERFORM CREATE POP-UP CHART TO SEE IF USER ACCEPTS OR DECLINES DATA**** '****IF ACCEPT, CONTINUE WITH CREATING OUTPUT FILE BELOW '****IF DECLINE, MOVE TO NEXT i AND CONTINUE LOOPING THROUGH DATA 'Directoy path for output file to go myFile = sPathFileOutput & myFileName & ".txt" fnum = FreeFile() Open myFile For Output As fnum 'Formatting header for new well survey Print #fnum, "# FILE HEADER" End If 'Survey data call If vData(i, 1) = vData(i - 1, 1) Then Print #fnum, vTab & vData(i, 6) & vTab & vData(i, 7) & vTab & vData(i, 8) End If 'Close output text file from editing if next row is a different well If i + 1 < UBound(vData, 1) Then If vData(i, 1) <> vData(i + 1, 1) Then Close #fnum End If End If 'Close output test file if end of data range is met If i = UBound(vData, 1) Then Close #fnum End If End If Next i End Sub 

Un exemple du menu contextuel UserForm pour permettre à l'user d'accepter de refuser de créer un file de sortie serait comme ceci: Graphique Pop-Up

Je viens de build cette petite macro de test qui devrait fournir un bon shell pour que vous puissiez incorporer dans votre macro. Vous allez devoir calculer le code correct pour tous les blocs If et ce qui ne l'est pas.

Le code suivant dans un module autonome:

 Public bSwitch As Boolean Sub Tester() MsgBox "Hi" 'this is all your code above the point where you stated you want to call the user form 'call the userform UserForm1.Show 'user will accept or decline if they If bSwitch Then 'if accept then keep moving with rest of code MsgBox "keep moving" Else 'if decline go to next i in loop MsgBox "end" End If End Sub 

J'ai créé un formulaire user avec 2 buttons de command et le code suivant:

 Private Sub CommandButton1_Click() bSwitch = True Me.Hide End Sub Private Sub CommandButton2_Click() bSwitch = False Me.Hide End Sub