Je tente de créer un frontal simple pour une base de données en créant un formulaire utilisateur via VBA dans Excel. Le formulaire est multipage. Lorsque je travaillais sur la première page, et que j'ouvrais le formulaire utilisateur avec UserForm1.Show vbModeless
, je n'ai eu aucun problème. La deuxième page était présente, ne contenait rien. Pour l'arrière-plan, la première page est un endroit pour entrer des informations à insérer dans la base de données, la seconde va être une page pour éditer ces champs et mettre à jour un enregistrement. Maintenant que j'ai commencé à créer la deuxième page, lorsque j'essaie de lancer le formulaire utilisateur en utilisant UserForm1.Show vbModeless
, l'erreur suivante s'affiche. Tout ce que chaque page contient est un tas d'étiquettes avec chacune une zone de texte ou une zone de liste déroulante correspondante.Erreur d'exécution '3704' avec formulaire utilisateur multipage
Run-time error '3704'
Operation is not allowed when the object is closed.
Comment puis-je ouvrir ceci afin de le montrer?
Le code étant appelé à ouvrir le UserForm est:
Option Explicit
Sub Show_Form()
UserForm1.Show vbModeless
End Sub
Le code initialize est:
Private Sub UserForm_Initialize()
Dim conn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSQL As String, NextAM As String
With conn
.Provider = "SQLOLEDB"
.ConnectionString = "DATA SOURCE = server;Initial Catalog=database;INTEGRATED SECURITY=sspi;"
.Open
End With
strSQL = "SELECT MAX(RIGHT(AM_Ref,6)) + 1 FROM AM"
rst.Open strSQL, conn
With ThisWorkbook
If Len(rst(0)) = 3 Then
.Sheets("Lists").Range("Next_AM") = "AM_000" & rst(0)
ElseIf Len(rst(0)) = 4 Then
.Sheets("Lists").Range("Next_AM") = "AM_00" & rst(0)
ElseIf Len(rst(0)) = 5 Then
.Sheets("Lists").Range("Next_AM") = "AM_0" & rst(0)
End If
Me.AM_Ref.Text = .Sheets("Lists").Range("Next_AM").Value2
End With
rst.Close
Set rst = Nothing
conn.Close
Set conn = Nothing
With Me
.StartUpPosition = 0
.Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
.Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
End With
End Sub
S'il vous plaît noter, la sous initialize est la même que celle qu'elle était auparavant. Si j'ai été peu clair du tout (probablement) s'il vous plaît faites le moi savoir et je peux clarifier.
À la votre!
votre problème est que vous fermez le premier/conn –
Façon de me faire sentir stupide @DougCoats! Mais merci beaucoup pour la réponse rapide. Pourquoi cela cause-t-il le problème? – Kyle
bien si la connexion est close et l'ensemble d'enregistrements est fermé, alors vous ne pouvez rien faire avec les enregistrements –