wake-up-neo.com

Zugriffsfenster beim Öffnen eines Formulars ausblenden

Meine Access-Datenbank verfügt über ein Autoexec-Makro, das ein Hauptmenü (Formular) öffnet. Alle notwendigen Funktionen sind menügesteuert (Formular), und ich möchte das Zugriffsfenster ausblenden, sodass nur die Formulare angezeigt werden. Ich wurde auf http://www.tek-tips.com/faqs.cfm?fid=2562 verwiesen, aber dies funktioniert nicht mit späteren Versionen. Gibt es einen Ausschnitt, der für Access 2007-2013 funktionieren wird?

5
Robert Kendall

Dies ist der Code, den ich in meinen Acc 2003- und 2007-Apps in der Umgebung von 2010 ausgeführt habe:

Private Sub Form_Load()
   'Hide Data-Base Window:
   DoCmd.SelectObject acTable, , True
   DoCmd.RunCommand acCmdWindowHide
  '...Other Actions...
end sub

Um das Band in 2007 und höher auszublenden, habe ich diese Zeile gefunden hier :

DoCmd.ShowToolbar "Ribbon", acToolbarNo
3
marlan

Es scheint, Ihr Ziel ist es, die für den Benutzer Ihrer Datenbank verfügbaren Funktionen der Access UI einzuschränken. Sie möchten sie auf die Optionen beschränken, die Sie über Ihr Startformular bereitstellen.

Nehmen Sie in diesem Fall eine Kopie Ihrer ACCDB-Datei und ändern Sie die Dateierweiterung in ACCDR. Wenn Sie dann die ACCDR über den Windows Explorer öffnen, öffnet Access sie im "Laufzeitmodus". Der Laufzeitmodus unterdrückt die meisten Standardoptionen der Benutzeroberfläche. Beispielsweise wird der Navigationsbereich nicht angezeigt und kann nicht einmal geöffnet werden. Außerdem gibt es eine sehr minimale Version des Menübands. Die Mehrheit der Standard-Ribbon-Optionen ist nicht mehr verfügbar.

Der Laufzeitmodus hat andere Konsequenzen, die Sie untersuchen sollten, um zu sehen, ob er für Ihre Anforderungen geeignet ist. Ein wichtiges Problem ist, dass der Laufzeitmodus die Anwendung beendet, wenn ein nicht behandelter Fehler auftritt.

Wenn der ACCDR/Laufzeitmodus für Ihre spezielle Situation geeignet ist, können Sie die Funktionen der Datenbank-Benutzeroberfläche kostengünstig einschränken. Beachten Sie jedoch, dass ein Benutzer eine Kopie der ACCDR anfertigen und die Dateierweiterung wieder in ACCDB ändern kann, so dass dieser Ansatz allein möglicherweise nicht Ihren Sicherheitsanforderungen entspricht.

3
HansUp

Ich verwende das, was bis 2016 funktioniert:

Option Compare Database
Option Explicit

'''HIDE WINDOW MODULE
'''USE THIS TO ACTIVATE HIDE WINDOW MODULE
''' SixHatHideWindow(SW_SHOWMINIMIZED)

Global Const SW_HIDE = 0
Global Const SW_SHOWNORMAL = 1
Global Const SW_SHOWMINIMIZED = 2
Global Const SW_SHOWMAXIMIZED = 3

Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Function SixHatHideWindow(nCmdShow As Long)
    Dim loX As Long
    Dim loForm As Form
    On Error Resume Next
    Set loForm = Screen.ActiveForm

    If Err <> 0 Then
        loX = apiShowWindow(hWndAccessApp, nCmdShow)
        Err.Clear
    End If

    If nCmdShow = SW_SHOWMINIMIZED And loForm.Modal = True Then
        MsgBox "Cannot minimize Access with " _
        & (loForm.Caption + " ") _
        & "form on screen"
    ElseIf nCmdShow = SW_HIDE And loForm.PopUp <> True Then
        MsgBox "Cannot hide Access with " _
        & (loForm.Caption + " ") _
        & "form on screen"
    Else
        loX = apiShowWindow(hWndAccessApp, nCmdShow)
    End If
    SixHatHideWindow = (loX <> 0)
End Function

So blenden Sie das Fenster einfach aus: Call SixHatHideWindow(SW_SHOWMINIMIZED)

AUCH HINWEIS: Abhängig von der Version, d. H. 32 Bit oder 64 Bit, müssen Sie möglicherweise das PtrSafe-Attribut hinzufügen. Wenn Sie Probleme mit dieser Version haben, deklarieren Sie die API-Funktion wie folgt: Private Declare PtrSafe Function apiShowWindow...

3
Anthony Griggs

Ich habe versucht, das Fenster der Access-Anwendung auszublenden und Popup-Formulare zu verwenden, die ich in Outlook ausführen kann. So bin ich auf diesen Beitrag gestoßen. Ich fand jedoch, dass mit Outlook 2013 64bit unter Windows 7 64bit nicht einmal die Funktion SixHatHideWindow benötigt wird. Mit dem folgenden Code in Outlook 2013 wird dasselbe erreicht. (Vergessen Sie nicht, einen Verweis auf die Access-Objektbibliothek in VBA hinzuzufügen.) Diese Prozedur speichert die Beschriftung aus dem derzeit aktiven Outlook-Fenster, startet eine neue versteckte Instanz von Access (Anwendungsfenster nicht sichtbar), öffnet die angegebene Access-Datenbank. Führt das festgelegte Formular aus (als sichtbar), beendet die Access-Instanz, wenn das Formular geschlossen wird, und aktiviert das ursprüngliche aktive Outlook-Fenster erneut. Ich habe dies weder in einer anderen Umgebung noch mit Runtime Access getestet.

Das Tolle an diesem Ansatz ist, dass kein besonderer Code in das Formularereignis in der Access-Datenbank eingefügt werden muss. Der gesamte erforderliche Code ist in Outlook VBA enthalten. Die Popup- und Modaleigenschaften des Datenbankformulars müssen auch in der Datenbank nicht auf "Ja" gesetzt werden.

Das Formular ist in diesem Fall ein kompliziertes Formular mit einem Registersteuerelement und mehreren Unterformularen. Alles scheint zu funktionieren, egal ob das Formular von Access selbst oder von Outlook aus geöffnet wird.

Hinweis: Die SetWindowPos-API definiert die Position und Größe des Access-Hauptfensters, auch wenn Access nicht sichtbar ist. Wenn Access geschlossen wird, öffnet der Benutzer beim nächsten Öffnen von Access die von SetWindowPos-API festgelegte Größe und Position. Dies kann für Benutzer ärgerlich sein. Daher setzt das SetWindowPos-API das Access-Anwendungsfenster auf die volle Bildschirmgröße. Wenn der Benutzer das nächste Mal Zugriff öffnet, wird er auf seinem Bildschirm maximiert. Möglicherweise gibt es differenziertere Methoden, um damit umzugehen, aber dieser Ansatz ist schnell und einfach, und die meisten Benutzer arbeiten in den meisten Fällen mit maximiertem Zugriff.

Hoffe, das hilft jemandem.

Private Declare PtrSafe Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long
Private Declare PtrSafe Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As Long
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Sub OpenAccessFrmProjDetails()
      Dim accapp As Access.Application
      Dim HoldCaption As String
      Dim ScreenRect As RECT
      Dim ret As Long
      Dim width As Variant
      Dim height As Variant

      'Get the width and height of the screen in pixels
10    ret = GetClientRect(CLng(GetDesktopWindow()), ScreenRect)
20    width = ScreenRect.Right - ScreenRect.Left
30    height = ScreenRect.Bottom - ScreenRect.Top

      'Get Outlook activewindow caption
40    HoldCaption = ActiveWindow.Caption

      'Display the Access database form
50    Set accapp = New Access.Application
60    With accapp
70        .opencurrentdatabase ("C:\Users\pmf\Documents\Programming Development\Access Visibility Testing\Hidden.accdb")
80        SetWindowPos .hWndAccessApp, 0, 0, 0, width, height, 0
90        .DoCmd.OpenForm FormName:="frmProjDetails", WindowMode:=acDialog
100   End With

110   Set accapp = Nothing

      'Reactivate Outlook
120   AppActivate HoldCaption

110   End Sub
0
phillfri