2016-10-11 6 views
0

MS Outlookでは、MS Accessでマクロを呼び出すボタンがあります。そのマクロはフォームを開き、テキストを設定します。そのボタンを押すたびに、Accessの新しいインスタンスが開かれています。 Accessの複数のインスタンスを開くことを防止するにはどうすればよいですか?Outlookの.RunがAccessインスタンスを2回開くのを防ぐにはどうすればよいですか?

見通しコード:

'general declarations: 
Public appAccess As Object 


Sub OpenRecord() 
    Dim Reference As String 
    Dim docAccess 

    Reference = 'teststring' 

    Set appAccess = CreateObject("Access.Application") 
    docAccess = appAccess.opencurrentdatabase("D:\Database\MSA_db.accdb") 
    appAccess.Visible = True 
    appAccess.Run "OpenInternalReference", Reference 
End Sub 

アクセスコード:

Public Sub OpenInternalReference(MailReference As String) 
    Dim stDocName As String 
    Dim stLinkCriteria As String 

    stDocName = "browse" 
    DoCmd.OpenForm stDocName, , , stLinkCriteria 

    Forms("Browse").prefilter.SetFocus 
    Forms("Browse").prefilter.Text = MailReference 
End Sub 

答えて

2

あなたの問題は.Run方法ではありません、それは常にアクセスの新しいインスタンスを作成しますので、あなたのSet appAccess = CreateObject("Access.Application")です。

このコードは、すでに開いているアクセスアプリケーションを取得しようとすると何も見つからなかった場合は、新しいを作成します。私は追加する必要がありました

Dim appAccess As Object 

On Error Resume Next 
Set appAccess = GetObject(Class:="Access.Application") 
On Error GoTo 0 

If appAccess Is Nothing Then 
    Set appAccess = CreateObject("Access.Application") 
End If 
+0

だけの事は、 'エラーで' opencurrentdatabase'上Next'を再開しましたコマンド。 – Jellema

+0

@Jellema On Error Resume Nextを追加した場合、On Error Goto 0を追加する必要があります。それ以外の場合は、Peer Reviewでエラーを請求する必要があります。 – niton

+0

@niton:これを使用します – Jellema

関連する問題