2017-01-09 3 views
0

これは私が質問したprevious questionのフォローアップです。あなたの助けを借りてコミュニティに感謝します。Application_Startup変数はサブの終了後に消えます

初めて新しいアイテムのフォルダをチェックするためにWithEventsコードを作成しようとしています。最終的な計画は、ItemsAddイベントを使用して他の処理をトリガーすることですが、今のところ、それをフォルダに保存し、それほど遠くには行かないようにしようとしています。

以下のApplication_Startupコードを実行すると、直前のウィンドウに正しいclntFldrItmsが見つかりました。問題は、問題のフォルダにアイテムをドラッグすると、ItemAddマクロが起動しないということです。 clntFldrItmsのウォッチを追加しようとすると、変数は何も設定されません。 Application_Startupサブが終了するとすぐに、割り当てが停止します。

すべてのコードはThisOutlookSessionオブジェクトにあります。

私は(たとえばExchangeではなく)SMTP電子メールアドレスで作業している可能性がありますか?

もう一度お手数をおかけします。

EDIT私の応答をEugeneのコメントに追加する。エディタを開いてApplication_Startupサブステップに入ると、clntFldrItms = clntFldr.Items行に移動する前でもclntFldrItmsが正しく割り当てられていることに気付きました。私が踏み込むとすぐに、もう一度消えてしまいます。私はItemAddサブにステップインすることはできませんが、私は他のコードにステップインするとclntFldrItmsは何もありません。

最終編集申し訳ありませんが、私はこれを閉じるのを忘れました。私は問題自体を解決することができませんでしたが、私はそれが私のSMTPアカウントに起因することに気付きました。私はExchangeとの仕事でそれを試してみたところ、うまくいった。私がExchangeで働いていない限り、イベントは発生しないようです。

Option Explicit 

Public WithEvents clntFldrItms As Outlook.Items 

Private Sub Application_Startup() 
    Dim clntFldr As MAPIFolder 
    Set clntFldr = Application.Session.GetDefaultFolder(olFolderSentMail).Folders("Client Emails") 
    Set clntFldrItms = clntFldr.Items 
    Set clntFldr = Nothing 
    Debug.Print clntFldrItms.item(1).Subject 
End Sub 

Private Sub clntFldrItms_ItemAdd(ByVal item As Object) 
    Dim bChar As String 
    bChar = "\/:*?™""® <>|.&@#_+`©~;-+=^$!,'" & Chr(34) 
    Dim saveName As String 
    If item.Class = olMail Then 
     saveName = item.Subject 
     For x = 1 To Len(bChar) 
      saveName = Replace(saveName, Mid(bChar, x, 1), "-") 
     Next x 
     item.SaveAs "C:\Users\User\Google Drive\8 - VBA work\Preparation for Assisted Responder\Sent Messages Folder\" & _ 
     saveName & ".msg", olMSG 
    End If 
End Sub 
+0

VBAマクロはOutlookで実行できますか?トラストセンターの設定をチェックする機会がありましたか? –

+0

おかげさまでユージーン、私はすでにOutlookセッションでマクロを束ねています。いいえサイコロ... – PKB

+0

私はコードを動作させました。それはOutlook 2010とMicrosoft Exchangeで動作しているようですので、問題は解決しています。私は問題がOutlook 2016かSMTP電子メールアドレスのどちらであるか分かりませんが、後者は疑いがあります。誰もが何かを持っていない場合、アイデアのためにハッピー、試してみていただきありがとう乾杯。 – PKB

答えて

1

は、ItemAddイベントハンドラにブレークポイントを設定し、ブレークポイントにヒットしたときにそこclntFldrItmsオブジェクトをチェックアウトしてください。

複数のアイテムが同時に追加された場合(16以上 - これはOutlookのよくある問題です)、ItemAddイベントは発生しません。

Getting Started with VBA in Outlook 2010の記事が壊れている可能性があります。

EDITclntFldrItmsは、Outlookの起動時にStartupイベントハンドラが実行されるために設定されています。したがって、オブジェクトはシーンの背後の起動時に初期化されます。

+0

ありがとう、ユージーン。私はそれをして、私はそれが正しく設定されて見ることができますから。私は面白いことに気づいた。私がエディタを開いてApplication_Startupサブステップに入ると、 'clntFldrItms = clntFldr.Items'行に入る前でも' clntFldrItms'が正しく割り当てられています。私が踏み込むとすぐに、もう一度消えてしまいます。私はItemAddサブステップに入ることができませんが、他のコードにステップインしたときに 'clntFldrItms'はNothingになります。 – PKB

+0

申し訳ありません、早めに入力....任意の考えですか? – PKB

+1

次の文を削除してください。 'Set clntFldr = Nothing' –

関連する問題