1

MS Outlook の実行中のインスタンスに接続するマクロが Access にあります。

マクロは機能していましたが、先週エラーが発生し始めました: Activex コンポーネントは、マクロを実行するたびにオブジェクトを作成できません。

コードの一部と、現在失敗している場所を次に示します。

Function GatherDailyStats()
Dim oOlAp As Object, oOlns As Object, oOlInb As Object
Dim oOlItm As Object
'Dim FileName As
Dim i, j As Integer
Dim strDir1 As String
Dim strDir2 As String
'~~> Get Outlook instance
Set oOlAp = GetObject(, "Outlook.Application") '--**THIS IS WHERE IT FAILS**
Set oOlns = oOlAp.GetNamespace("MAPI")
Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox).Folders.Item("Daily Stats")

'~~> Check if there are any actual unread emails
If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
    MsgBox "NO Unread Email In Daily Stats folder"
    Exit Function
End If

コードを作成して徹底的にテストして以来、コードに変更はありません。


更新: 別のコンピューターで同じアプリケーションをテストしたところ、完全に動作しました。

4

3 に答える 3

1

アプリケーションが実行されていない場合、GetObject はエラーをスローします。これを確認する必要があります:

On Error Resume Next
Set oOlAp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then Set oOlAp = New Outlook.Application

または、オブジェクトの新しいインスタンスを作成することもできます:

Set oOlAp = CreateObject("Outlook.Application")

もちろん、を使用CreateObjectして新しいインスタンスを作成すると、同じタイプのオブジェクトが既に初期化されている場合にリソースの負荷が増加します。別の言い方をすれば、パフォーマンスを向上させ、システム リソースの使用を抑えるには、最初に提案されたソリューションを使用することをお勧めします。

于 2013-01-28T20:05:52.650 に答える
1

これは、ROT と、Office アプリケーションが設計上、起動シーケンスが完了するまで登録されない方法に関する KB 記事です。何らかの理由でこれまで一度も遭遇したことがなく、常にそこにあった問題が発生している可能性があります。

この議論から離れて、アプリケーションが実行されていることを確認するために、フォールバックを追加してみてください:

    On Error Resume Next
    Set objOutlook = GetObject(, "Outlook.Application")
    If Err.Number = 429 Then
        Set objOutlook = CreateObject("Outlook.Application") 
    End If

同じ議論から、Outlook 2010 が管理者モードで起動されていない場合、ROT への登録に何らかの問題があるように見えることに注意することが重要です。

どうやら、誰かが投稿した次のような回避策があります。

...Everyone グループに完全な権限を Office インストール ディレクトリに割り当てると、それが機能します。

それが最高のアイデアかどうかはわかりませんが、Office 2010 の既知の問題です。

編集:これが最後のリソースです。

于 2013-01-28T20:01:54.327 に答える
0

まず、Outlook.Application オブジェクトのインスタンスを作成するときは常に CreateObject を使用します。Outlook はシングルトンであるため、ログインしているユーザーに対して実行されるインスタンスは 1 つだけです。
次に、Outlook と Access のバージョンは何ですか? それらはすべて同じバージョンですか?そうでない場合、どちらも 32 ビットまたは 64 ビットですか?

于 2013-01-28T23:34:07.993 に答える