none
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
    

    Dienstag, 16. Januar 2018 12:16

Antworten

  • Hallo!

    Die beiden Zeilen

    DoCmd.NavigateTo "acNavigationCategoryObjectType"
    DoCmd
    .RunCommand acCmdWindowHide

    dienen 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("DeinStartformular").IsLoaded Then

         Forms!DeinStartformular.Visible = True

    End If


    Karl
    http://www.AccessDevCon.com 
    http://www.donkarl.com

    Dienstag, 16. Januar 2018 15:57

Alle Antworten

  • Hallo!

    Die beiden Zeilen

    DoCmd.NavigateTo "acNavigationCategoryObjectType"
    DoCmd
    .RunCommand acCmdWindowHide

    dienen 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("DeinStartformular").IsLoaded Then

         Forms!DeinStartformular.Visible = True

    End If


    Karl
    http://www.AccessDevCon.com 
    http://www.donkarl.com

    Dienstag, 16. Januar 2018 15:57
  • 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

    Dienstag, 16. Januar 2018 22:09
  • 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


    Freitag, 19. Januar 2018 21:52
  • 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.


    Karl
    http://www.AccessDevCon.com
    http://www.donkarl.com 

    Freitag, 19. Januar 2018 22:17