My Accessデータベースには、メインメニュー(フォーム)を開くautoexecマクロがあります。必要な機能はすべてメニュー(フォーム)で制御されるため、フォームのみが表示されるようにAccessウィンドウを非表示にしたいと思います。私は http://www.tek-tips.com/faqs.cfm?fid=2562 と呼ばれていましたが、これはそれ以降のバージョンでは機能しません。 Access 2007-2013で機能するスニペットはありますか?
これは、2010環境で実行しているAcc 2003および2007 Appsで実行するコードです。
Private Sub Form_Load()
'Hide Data-Base Window:
DoCmd.SelectObject acTable, , True
DoCmd.RunCommand acCmdWindowHide
'...Other Actions...
end sub
2007年以降のリボンを非表示にするには、次の行を使用します here :
DoCmd.ShowToolbar "Ribbon", acToolbarNo
あなたの目標は、データベースのユーザーが利用できるAccess UI機能を制限することです。スタートアップフォームを介して提供するオプションにそれらを制限したいです。
その場合は、ACCDBファイルのコピーを取り、そのファイル拡張子をACCDRに変更します。次に、WindowsエクスプローラーからACCDRを開くと、Accessは "ランタイムモード"でACCDRを開きます。ランタイムモードでは、ほとんどの標準UIオプションが抑制されます。たとえば、ナビゲーションウィンドウは表示されず、開くこともできません。また、リボンの最小限のバージョンを提供します。標準のリボンオプションの大部分はなくなりました。
ランタイムモードには、ニーズに適しているかどうかを調べるために調査が必要なその他の影響があります。重要な問題の1つは、未処理のエラーが発生したときにランタイムモードがアプリケーションを終了することです。
ACCDR /ランタイムモードが特定の状況に適している場合、データベースのUI機能を制限する安価な方法です。ただし、ユーザーがACCDRのコピーを作成し、ファイル拡張子をACCDBに戻す可能性があるため、このアプローチだけではセキュリティ要件を満たさない可能性があることに注意してください。
これは私が2016年まで機能するものを使用しています:
_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
_
ウィンドウを単に隠すには:Call SixHatHideWindow(SW_SHOWMINIMIZED)
また、注:32ビットまたは64ビットなどのバージョンによっては、PtrSafe属性を追加する必要がある場合があります。これで問題が発生する場合は、次のようなAPI関数を宣言してください:_Private Declare PtrSafe Function apiShowWindow...
_
Accessアプリケーションウィンドウを非表示にし、Outlookから実行できるポップアップフォームを使用することを目指していました。それが私がこの投稿を偶然見つけた方法です。しかし、Windows 7 64ビットのOutlook 2013 64ビットでは、SixHatHideWindow関数も必要ないことがわかりました。 Outlook 2013で次のコードを使用しても同じことを実現できます。 (VBAのAccessオブジェクトライブラリへの参照を追加することを忘れないでください。)この手順では、現在アクティブなOutlookウィンドウからキャプションを保存し、Accessの新しい非表示インスタンス(アプリケーションウィンドウは表示されません)を開始し、指定されたAccessデータベースを開きます。指定されたフォームを(表示されているとおりに)実行し、フォームが閉じられるとAccessインスタンスを終了し、元のOutlookアクティブウィンドウを再びアクティブにします。他の環境でも、ランタイムアクセスでもテストしていません。
このアプローチの優れた点は、Accessデータベースのフォームオープンイベントに特別なコードを挿入する必要がないことです。必要なコードはすべてOutlook VBAに含まれています。また、データベースフォームのポップアップとモーダルプロパティをデータベースで「はい」に設定する必要もありません。
この場合のフォームは、タブコントロールといくつかのサブフォームを持つ複雑なフォームです。フォームがAccess自体から開かれた場合でも、Outlookからの自動化によって開かれた場合でも、すべてが機能しているように見えます。
注:Accessが表示されていなくても、SetWindowPos APIはAccessメインウィンドウの場所とサイズを設定します。 Accessが閉じられると、ユーザーが次回Accessを開いたときに、SetWindowPos APIによって設定されたサイズと位置で再び開かれます。これはユーザーにとって煩わしい場合があるため、SetWindowPos apiはAccessアプリケーションウィンドウをフルスクリーンサイズに設定します。ユーザーが次回Accessを開いたときに、画面上で最大化されます。これを処理するためのより洗練された方法があるかもしれませんが、このアプローチは速くて簡単で、ほとんどの場合、ほとんどのユーザーはAccessを最大化して作業します。
これが誰かを助けることを願っています。
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