Benutzer mit den meisten Antworten
Access 2010 (64bit) interner Fehler? DoCmd.RunCommand acCmdWindowHide macht Fehler

Frage
-
Liebe Leute,
ich habe ein Problem, wonach ich in den Foren bisher ohne Erfolg gesucht habe.
Fast sicher geht es hier um keinen Fehler im VBA-Code, viel eher wird es ein nicht nachvollziehbares Access-internes-Verhalten sein, und zwar leider ein
fehlerhaftes... Trotzdem hoffe ich, dann man mit Tricks oder mit Umwegen im VBA-Code ein normales Verhalten von Access wieder erzwingen kann.
Die Access Version ist 2010er, genauer: Office Professional Plus 2010, 64bit
Das Problem ist: ich betreue eine Access-Anwendung, wo Access als Frontend, SQL Server als Backend arbeiten. Es ist eine alte Anwendung (ca.10 Jahre), und damit
arbeiten ca.40-60 User täglich. Seit ein paar Wochen hat ein User gemeldet, dass er beim Starten der Anwendung einen leeren Bildschirm bekommt, heute sind es bereits 3
User, die das selbe Problem haben. An der Anwendung wurde in dieser Zeit nichts geändert.
Bilschirmaufbau erfolgt im Autoexec-Makro.
Autoexec Funktion und den Code, in dem die Eigenschaften definiert werden,kopiere ich unten rein.
Wenn ich die folgende Zeile auskommentiere, wird die Anwendung korrekt gestartet, der Bildschirm wird angezeigt, nur halt die Eigenschaften sind nicht so definiert,
wir es brauchen.
DoCmd.RunCommand acCmdWindowHide
Hat jemand eine Idee?
Eventuell eine Idee wie man diese Zeile ersetzen kann durch eine andere Definition. Methode, ..?
Oder Idee was dieses seltsame verhalten von Access verursacht, bzw. wie es wegzukriegen ist?
Alle andere Benutzer können nach wie vor normal arbeiten, und auch die jetzt problematischen Konten haben bisher fehlerfrei funktioniert.Danke fürs Mitdenken! :)
Liebe Grüße,
Anna
Public Function autoexecFunction() Dim PersonID As Long Dim w_Ret As Long Dim w_count As Integer readArgs rsInit If CurrentUserPersonID > 0 Then If UserRole = 188 Or UserRole = 281 Then openForm "user" ElseIf UserRole = 189 Then openTime PersonID End If If (isAdminVersion) Then On Error Resume Next adminVersion = True DoCmd.openForm "admin" End If End If SetAccessFrames End Function Public Sub SetAccessFrames() Dim rs1 As Recordset2 DoCmd.ShowToolbar "Ribbon", acToolbarNo DoCmd.NavigateTo "acNavigationCategoryObjectType" DoCmd.RunCommand acCmdWindowHide Set rs1 = CurrentDb.OpenRecordset("accesslayout", dbOpenDynaset, dbSeeChanges) If rs1!showframe <> 0 Then DoCmd.ShowToolbar "Ribbon", acToolbarYes DoCmd.SelectObject acTable, , True On Error Resume Next CurrentDb.Properties("AllowBuiltinToolbars") = True CurrentDb.Properties("AllowFullMenus") = True CurrentDb.Properties("StartUpShowStatusBar") = True CurrentDb.Properties("AllowShortcutMenus") = True CurrentDb.Properties("ShowDocumentTabs") = True On Error GoTo 0 Else DoCmd.ShowToolbar "Ribbon", acToolbarNo DoCmd.SelectObject acTable, , False On Error Resume Next CurrentDb.Properties("AllowBuiltinToolbars") = False CurrentDb.Properties("AllowFullMenus") = False CurrentDb.Properties("StartUpShowStatusBar") = False CurrentDb.Properties("AllowShortcutMenus") = False CurrentDb.Properties("ShowDocumentTabs") = False hideMessageBar On Error GoTo 0 End If End Sub
Antworten
-
Hallo!
Die beiden Zeilen
DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.RunCommand acCmdWindowHidedienen dazu, den Navigationsbereich auszuwählen und auszublenden. Das ist an sich ok so (s. http://www.donkarl.com?FAQ6.2).
Das RunCommand bezieht sich immer auf das gerade aktuelle Objektfenster. Der "Leer"-Effekt heißt wahrscheinlich, dass es auf manchen Rechnern bzw. in manchen Situationen das "Startformular" erwischt.
Ob das an irgendwelchen Einstellungen liegt oder ein Timingproblem ist, müsste man versuchen, mit Prüfen und Testen vorort herauszubekommen.
Wenn ich mit meiner Vermutung richtig liege, könntest du das absichern, indem du z.B. am Ende der ersten Funktion nach dem Aufruf von SetAccessFrames das Formular wieder einblendest, das sichtbar sein soll. Also prüfe in den Optionen der DB, ob ein Startformular eingestellt ist. Das Prinzip wäre dann:
If
CurrentProject.AllForms("Dein
Startformular").IsLoaded Then
Forms!DeinStartformular.Visible = True
End If
- Bearbeitet Karl DonaubauerMVP Dienstag, 16. Januar 2018 15:58
- Als Antwort markiert anna_prinetsol Dienstag, 16. Januar 2018 22:10
Alle Antworten
-
Hallo!
Die beiden Zeilen
DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.RunCommand acCmdWindowHidedienen dazu, den Navigationsbereich auszuwählen und auszublenden. Das ist an sich ok so (s. http://www.donkarl.com?FAQ6.2).
Das RunCommand bezieht sich immer auf das gerade aktuelle Objektfenster. Der "Leer"-Effekt heißt wahrscheinlich, dass es auf manchen Rechnern bzw. in manchen Situationen das "Startformular" erwischt.
Ob das an irgendwelchen Einstellungen liegt oder ein Timingproblem ist, müsste man versuchen, mit Prüfen und Testen vorort herauszubekommen.
Wenn ich mit meiner Vermutung richtig liege, könntest du das absichern, indem du z.B. am Ende der ersten Funktion nach dem Aufruf von SetAccessFrames das Formular wieder einblendest, das sichtbar sein soll. Also prüfe in den Optionen der DB, ob ein Startformular eingestellt ist. Das Prinzip wäre dann:
If
CurrentProject.AllForms("Dein
Startformular").IsLoaded Then
Forms!DeinStartformular.Visible = True
End If
- Bearbeitet Karl DonaubauerMVP Dienstag, 16. Januar 2018 15:58
- Als Antwort markiert anna_prinetsol Dienstag, 16. Januar 2018 22:10
-
Hallo Karl,
vielen Dank! :) Das hat gehofen! Dass es so einfach an der Sichtbarkeit des Formulars liegt, das ist mir überhaupt nicht eingefallen, ich hab die Fehler ganz wo anders vermutet und gesucht... Diesbezüglich fehlt mir wahrscheinlich einfach die Übung... Danke! :)
Lg, Anna
-
Hallo,
noch etwas ist mir aufgefallen, und zwar ist der Navigationsbereich links nicht ausgeblendet. Früher war (und und ist immer noch bei den Benutzern, die kein Problem beim Programmstart hatten) der Navigationsbereich gar nicht angezeigt, komplett ausgeblendet.
Es liegt dann wahrscheinlich daran, was du oben beschreibst: hide wird auf das Startformular bezogen, und nicht auf den Navigationsbereich. Deswegen passt die Lösung, die du empfohlen hast, weil man das Startformular einfach wieder einblenden lassen kann. Aber Hide hat eben das Startformular erwischt und der Navigationsbereich bleibt unberührt da.
Wie könnte ich den Navigationsbereich mit dem Hide treffen und das Startformular anzeigen lassen?
Liebe Grüße,
Anna
- Bearbeitet anna_prinetsol Freitag, 19. Januar 2018 22:08
-
noch etwas ist mir aufgefallen, und zwar ist der Navigationsbereich links nicht ausgeblendet. Früher war (und und ist immer noch bei den Benutzern, die kein Problem beim Programmstart hatten) der Navigationsbereich gar nicht angezeigt, komplett ausgeblendet.
Gibt es eventuelle auch diesbezüglich einen nachvollziehbaren Grund?
Hallo!
Wie ich bereits schrieb, dienen die beiden Codezeilen, die wir weiter oben diskutiert haben, dazu, den Navigationsbereich auszublenden. Anscheinend funktioniert genau das nicht in den Problemfällen sondern wurde stattdessen das Startformular ausgeblendet. Ich persönlich würde der Ursache dafür weiter nachgehen, sie austesten etc. wie kurz geschrieben.
Die Frage ist, warum das Ausblenden des Navigationsbereiches nicht generell in den Optionen eingestellt ist, also Datei - Optionen - Aktuelle Datenbank - Navigationsbereich anzeigen = Haken weg. Dann könntest du die beiden problematischen, ausblendenden Codezeilen einfach auskommentieren. Vielleicht gibt's einen inhaltlichen Grund dafür, ich kenne ja die Anwendung nicht weiter.
Es gibt dann noch ein paar Kommandos, nämlich alle DoCmd... acLink, die den Navigationsbereich ungewollt (man könnte auch sagen bugmäßig) wieder einblenden und wo man diese Ausblenderei per Code braucht. Aber hier geht's ja um den Anwendungsstart. Da würde ich schlicht die Option verwenden.
- Bearbeitet Karl DonaubauerMVP Freitag, 19. Januar 2018 22:17