Öffnenformular-Aktion wurde abgebrochen, der in der MS-Access-VBA-code
Unterstütze ich eine Anwendung, die ausgeführt wurde, für die letzten 3 Jahre. Es wurde entwickelt, vollständig in MS Access und in VBA geschrieben.
Plötzlich die Anwendung ist für die genannten Fehler bei folgenden Zeilen:
DoCmd.OpenForm FormName:="frmNewPeerGroup", View:=acNormal, windowmode:=acWindowNormal, OpenArgs:=5
FrmNewPeerGroup code
Private Sub Form_Open(Cancel As Integer) Dim lDept So Lange, lDiv, Wie Lange lType = OpenArgs 'Geliefert von Anrufer lAssmtVer = 1 'Aktuelle sName = "" sDescription = "" dtCreatedDate = Format(Jetzt(), "dd/mm/yyyy") sCreatedBy = UCase(userPerms.NTLoginName) lSupervisorID = userPerms.userID lTeam = 0 Mit cmbBxType .RowSourceType = "Value List" .RowSource = GetValueListDict(pgType) .Wert = lType .Enabled = (OpenArgs = 1) Ende Mit Mit cmbBxVersion .RowSourceType = "Value List" .RowSource = GetValueListDict(pgAssmtType) .Wert = lAssmtVer Ende Mit mgLogoDesc.Visible = False txtBxCreatedDate.Wert = dtCreatedDate txtBxCreatedBy.Wert = sCreatedBy Wenn OpenArgs = 5 Dann lTeam = oActiveAssmt.TeamID lDept = GetParentID(aTeams(), CInt(lTeam)) lDiv = GetParentID(Adepten(), CInt(lDept)) Mit cmbBxDivision .RowSourceType = "Value List" .RowSource = GetValueListArray(aDivs()) .Wert = lDiv .Enabled = False Ende Mit Mit cmbBxDepartment .RowSourceType = "Value List" .RowSource = GetValueListArray(Adepten()) .Wert = lDept .Enabled = False Ende Mit Mit cmbBxTeam .RowSourceType = "Value List" .RowSource = GetValueListArray(aTeams()) .Wert = lTeam .Enabled = False Ende Mit Sonst Mit cmbBxDivision .RowSourceType = "Value List" .RowSource = GetValueListArray(aDivs()) .Enabled = False Ende Mit cmbBxDepartment.Enabled = False cmbBxTeam.Enabled = False End If End Sub
Viele Instanzen des DoCmd.OpenForm
Befehl geben, den Fehler in einer message-box sagen:
Der Ausdruck Klicken eingegebene als die Ereignis-Eigenschaft festlegen produziert den folgenden Fehler: Die Öffnenformular-Aktion wurde abgebrochen. - Der Ausdruck gibt möglicherweise weder den Namen eines Makros noch den Namen in einer benutzerdefinierten Funktion, noch [Ereignisprozedur] zurück. - Es wurde ein Fehler auswerten einer Funktion, eines Ereignisses oder eines Makros.
Dies ist die Fehlermeldung die ich erhalte.
Mein problem ist, das die gleiche code ausgeführt wurde um 3 Jahre, aber plötzlich einige updates von Microsoft oder Büro sein könnte, geben sich Mühe diesen code.
Kommt man über diesen Fehler in den letzten Wochen? Bitte lassen Sie mich wissen, was wir sonst noch tun können, um diese Arbeit zu machen wieder.
- Ich habe einige Anmerkungen zu meiner Antwort.
- Fügen Sie eine Fehler-handler für das Ereignis OnOpen des Formulars dies wird wahrscheinlich machen es klarer, wo das problem ist.
- Außerdem habe ich nie geschrieben, beliebigen code wie. Es sieht katastrophal für mich, als ob es geschrieben wurde von einem Flüchtling aus der VB, der keine Ahnung von VBA-Codierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob dies qualifiziert als eine Antwort, aber der code in das OnOpen-Ereignis ist abhängig von einer Menge von außerhalb Funktionen. Speziell der code ist die Zuordnung Wert-Listen für die RowSources einer Reihe von combo-Boxen. Die sofortige rote fahne, die mir einfällt, ist, dass nicht-SQL Rowsources haben eine endliche Länge, und in Access 97, das war die Beschränkung auf 2048 Zeichen (in Access 2003, es ist 32,750 -- frag mich nicht warum, es ist , dass Nummer!).
So, die unmittelbare Sache, die ich sehe, ist, dass vielleicht was auch immer Daten, die Antriebe, die Funktionen, erstellen die Wert-Listen hat begonnen, die mehr als 2048 Zeichen lang sein.
Wenn das ist die eigentliche Antwort, dann Sie können schreiben Sie eine callback-Funktion, die Rückkehr der Werte in die arrays, und es wird nicht die Beschränkung auf die zurückgegebene Länge. Würden Sie legen Sie die RowsourceType auf den Namen Ihrer callback-Funktion und lassen Sie die Datensatzherkunft-Eigenschaft leer.
Beispiel der callback-Funktion finden Sie in der A97-Hilfe (obwohl ich nicht finden können das gleiche Beispiel in der A2K3-Hilfe). In der A97-Hilfe erhalten Sie dort durch die Suche nach Herkunftstyp, und klicken Sie dann im Hilfe-Fenster, klicken Sie auf den link in den Satz zu Lesen "Sie können auch legen Sie die RowSourceType-Eigenschaft mit einem ____Benutzer-definierte Funktion____."
Zu überprüfen, die Sie gerade brauchen, um herauszufinden, die Länge des zurückgegebenen Strings aus GetValueListArray (), die von jedem der arrays wird in der BeimÖffnen-Ereignis.
Es auch hilfreich sein, hinzufügen, einen Fehler-handler für das Ereignis OnOpen, insbesondere angesichts der Tatsache, dass es so viele externe Abhängigkeiten im code in bestimmten sub.
Und als letztes von allen, lassen Sie mich sagen, dass es aussieht wie schrecklich Programmierung. Die meisten dieser sollte einstellbar mit Standard-Eigenschaften, scheint mir. Ich auch Frage, die Art der Abhängigkeit von OpenArgs mit solchen undokumentierten input-Wert. Was bedeutet "5" bedeuten? Und was bedeutet die "1" bedeuten? Ist das irgendwo dokumentiert? Es ist einfach nur schrecklich, schreckliche code, meiner Meinung nach.
Ich würde wahrscheinlich tun Sie dies mit einer eigenständigen Klasse Modul statt, denn das wird selbst dokumentieren, in Bezug auf was was macht. Sie hatte eine bestimmte benannte Eigenschaft zu 5 und würden kontrollieren, was die form bekommt, die von der Klasse Modul Methoden zum Auffüllen der Listenfelder. Es würden alle an einem Ort zu sein, und Sie könnte verwenden Sie einen aussagekräftigen Namen der Eigenschaft, um es zu machen klar, was die Werte 5 und 1 darstellen. Es ist besonders hilfreich, um dies zu tun, wenn Sie die gleiche Art von code im Ereignis OnOpen von mehreren Formen. In diesem Fall, es ist ein no-brainer, um Sie aus der Formular-Module, und die Frage ist nur, ob man es in einem normalen Modul oder in einer eigenständigen Klasse-Modul (wie ich behaupte).
Sowieso, vielleicht nichts von alledem ist auf dem Punkt, aber es könnte Ihnen einige Ideen.
Dieser thread ist sehr alt, aber ich kam über die gleichen Fehler und verbrachte ein paar Stunden nach einer Antwort zu suchen. Ich war in der Lage, die Ursache zu finden nach einiger Zeit und dachte, die Veröffentlichung meiner Antwort, denn es kann helfen, jemanden in einer ähnlichen situation. Erstellen einer Anwendung mit Access-Formulare ist für mich neu, also die Fehlermeldung war nicht direkt intuitiv.
Meine Formen wurden Master-Tabelle " Formulare für die Dateneingabe und konfiguriert werden
Pop-up
undModal
mitMe.Form.Name
gesendet, die als parameter in derDoCmd.OpenForm
Befehl mit einer Taste (OnClick
Ereignis), die neben der Combo-Steuerelemente in einer Transaktion bilden, um Benutzern zu erlauben, schnell neue Datensätze hinzufügen. Der Wert dieses Parameters wurde aufgegriffen in derForm_Open(Cancel As Integer)
Veranstaltung und später verwendet, um das Kombinationsfeld zu aktualisieren (Forms!<formname>.Controls!<controlname>.Requery
), wenn Daten vorgelegt, die die master-Tabelle mit den pop-up-form.Scheint es, dass das Open-Ereignis tritt nicht auf, wenn Sie aktivieren ein Formular bereits geöffnet ist (ref: https://msdn.microsoft.com/en-us/library/office/aa211439(v=office.11).aspx). Jedes mal erhielt ich die Fehlermeldung, dass meine Daten Eintrag Formular öffnen in der Entwurfsansicht von Access. So Schloss ich das Formular im Entwurfsmodus, und wiederholt die Schritte. Und Voila! kein Fehler!
Da werde ich mehr als eine Form zu öffnen, ich brauche jetzt zu testen und zu versuchen, Sie zu nutzen
Form_Activate()
wie empfohlen in den oben genannten MSDN-Referenz-link.Könnte es sein, die Sicherheitseinstellungen wird der Zugriff? Alle neueren Versionen von Access hat ein security-Einstellungen dialog können Sie aktivieren (oder deaktivieren) Makros in der Anwendung. Ich denke Sie erhalten diese Fehlermeldung, wenn Makros deaktiviert sind.
Sind Sie sicher, dass eine der erforderlichen Verweise (VBA-IDE - > Option > Referenzen) darf nicht fehlen?
Wenn Sie verweisen, Excel/Word oder externe Objekte, sind Sie sicher, dass die Verweise auf die Typ-Bibliotheken sind die richtigen (wenn Sie mit den bestimmten Versionen zu tun, anstatt späte Bindung)
Bauen Sie die MDE auf einer 64 bit Maschine durch Zufall?
Was ist der code auf der form frmNewPeerGroup? Welche Access-version benutzt du? Wenn es 2003, sp3 verursacht Probleme, für die es einen hotfix. Haben Sie versucht, zu dekompilieren und /oder komprimieren und reparieren?
Wenn Sie eine original-mdb, überprüfen Sie die Referenzen, um sicherzustellen, dass keiner von Ihnen gekennzeichnet sind, FEHLEN. Dies ist durchaus ein wahrscheinlicher Grund für das problem, dass es plötzlich aufgetreten ist.
Überprüfen Sie die Referenzen, schauen Sie auf Tools->Verweise auf das Menü, um das code-Fenster.
Wenn keine Verweise fehlen, könnten Sie versuchen, Schritt durch die form-code, um sich eine genaue Idee, wo der Fehler Auftritt.