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?
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
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.
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...
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