回答編集履歴

4 てにをはなど修正

hsk

hsk score 720

2017/02/01 09:08  投稿

(コメントの補足をいただいて)
> 『Outlook上でメールを開く操作をした時に』
の個所は次のようなコードで実現できると思います。
```VBA
Private WithEvents g_mailItem As mailItem ''(1)
Private Sub g_mailItem_Open(Cancel As Boolean) ''(2)
   MsgBox g_mailItem.Subject  '' サンプル:件名をメッセージボックスで表示
End Sub
Private Sub Application_ItemLoad(ByVal Item As Object) ''(3)
   Dim mailItem As mailItem
   
   If TypeOf Item Is mailItem Then ''(4)
       Set g_mailItem = Item
   End If
End Sub
```
あからじめ、MailItem型のグローバル変数を用意して(1)、[MailItem.Open](https://msdn.microsoft.com/ja-jp/library/office/ff865989.aspx)イベントを定義しておきます(2)。
そして[Application](https://msdn.microsoft.com/ja-jp/library/office/ff866895.aspx)オブジェクトの(Application.ItemLoad)[https://msdn.microsoft.com/ja-jp/library/office/ff868544.aspx]イベントを定義します(3)。メールや予定表などのアイテムひとつを読み込むときに呼び出されるイベントです。対象が仮引数Itemに入っています。このItemの内容がMailItemである場合(4)には、これを(1)で用意してある変数にセットします。すると、開いたときに(2)のイベントが呼び出されます。メールメッセージは(3)でMailItem型のグローバル変数に入っていますので、ここで件名を判断したり、エクセルファイルに保存したりできます。
そして[Application](https://msdn.microsoft.com/ja-jp/library/office/ff866895.aspx)オブジェクトの(Application.ItemLoad)[https://msdn.microsoft.com/ja-jp/library/office/ff868544.aspx]イベントを定義します(3)。メールや予定表などのアイテムひとつを読み込むときに呼び出されるイベントです。対象が仮引数Itemに入っています。このItemの内容がMailItemである場合(4)には、これを(1)で用意してある変数にセットします。すると、開いたときに(2)のイベントが呼び出されます。メールメッセージは(4)でMailItem型のグローバル変数に入れてありますので、これを参照して件名を判断したり、エクセルファイルに保存したりできます。
---
もしかして
```VBA
Private Sub Application_ItemLoad(ByVal Item As Object)
   Dim mailItem As mailItem
   Set mailItem = Item
   
   If mailItem.Display() Then
   
   Else
   
   End If
End Sub
```
のようにしているのでしょうか?
mailitem.Display() は戻り値がないメソッドですので、If 文には判断のしようがないのでしょう。
「特定のメール」「何らかの処理」が、具体的に何なのかを書いていただければ、具体的な回答が得られると思います。
3 てにをは等

hsk

hsk score 720

2017/02/01 09:07  投稿

(コメントの補足をいただいて)
> 『Outlook上でメールを開く操作をした時に』
の個所は次のようなコードで実現できると思います。
```VBA
Private WithEvents g_mailItem As mailItem ''(1)
Private Sub g_mailItem_Open(Cancel As Boolean) ''(2)
MsgBox g_mailItem.Subject '' サンプル:件名をメッセージボックスで表示
End Sub
Private Sub Application_ItemLoad(ByVal Item As Object) ''(3)
Dim mailItem As mailItem
If TypeOf Item Is mailItem Then ''(4)
Set g_mailItem = Item
End If
End Sub
```
あからじめ、MailItem型のグローバル変数を用意して(1)、[MailItem.Open](https://msdn.microsoft.com/ja-jp/library/office/ff865989.aspx)イベントを定義しておきます(2)。
そして[Application](https://msdn.microsoft.com/ja-jp/library/office/ff866895.aspx)オブジェクトの(Application.ItemLoad)[https://msdn.microsoft.com/ja-jp/library/office/ff868544.aspx]イベントを定義します(3)。メールや予定表などのアイテムひとつを読み込むときに呼び出されるイベントです。対象が仮引数Itemに入っています。このItemの内容がMailItemである場合(4)には、これを(1)で用意してある変数にセットします。すると、開いたときに(2)のイベントが呼び出されます。メールメッセージは(3)でMailItem型のグローバル変数に入っていますので、ここで件名を判断したり、エクセルファイルに保存したりできます。
---
もしかして
```VBA
Private Sub Application_ItemLoad(ByVal Item As Object)
Dim mailItem As mailItem
Set mailItem = Item
If mailItem.Display() Then
Else
End If
End Sub
```
のようにしているのでしょうか?
mailitem.Display() は戻り値がないメソッドですので、If 文には判断のしようがないのでしょう。
「特定のメール」「何らかの処理」が、具体的に何なのかを書いていただければ、具体的な回答が得られると思います。
2 コメントの補足を受けて

hsk

hsk score 720

2017/02/01 09:06  投稿

(コメントの補足をいただいて)  
> 『Outlook上でメールを開く操作をした時に』  
の個所は次のようなコードで実現できると思います。  
 
```VBA  
Private WithEvents g_mailItem As mailItem ''(1)  
 
Private Sub g_mailItem_Open(Cancel As Boolean) ''(2)  
   MsgBox g_mailItem.Subject  '' サンプル:件名をメッセージボックスで表示  
End Sub  
 
Private Sub Application_ItemLoad(ByVal Item As Object) ''(3)  
   Dim mailItem As mailItem  
     
   If TypeOf Item Is mailItem Then ''(4)  
       Set g_mailItem = Item  
   End If  
End Sub  
 
```  
 
あからじめ、MailItem型のグローバル変数を用意して(1)、[MailItem.Open](https://msdn.microsoft.com/ja-jp/library/office/ff865989.aspx)イベントを定義しておきます(2)。  
 
そして[Application](https://msdn.microsoft.com/ja-jp/library/office/ff866895.aspx)オブジェクトの(Application.ItemLoad)[https://msdn.microsoft.com/ja-jp/library/office/ff868544.aspx]イベントを定義します(3)。メールや予定表などのアイテムひとつを読み込むときに呼び出されるイベントです。対象が仮引数Itemに入っています。このItemの内容がMailItemである場合(4)には、これを(1)で用意してある変数にセットします。すると、開いたときに(2)のイベントが呼び出されます。メールメッセージは(3)でMailItem型のグローバル変数に入っていますので、ここで件名を判断したり、エクセルファイルに保存したりできます。  
 
---  
 
もしかして
```VBA
Private Sub Application_ItemLoad(ByVal Item As Object)
   Dim mailItem As mailItem
   Set mailItem = Item
   
   If mailItem.Display() Then
   
   Else
   
   End If
End Sub
```
のようにしているのでしょうか?
mailitem.Display() は戻り値がないメソッドですので、If 文には判断のしようがないのでしょう。
「特定のメール」「何らかの処理」が、具体的に何なのかを書いていただければ、具体的な回答が得られると思います。
1 補足

hsk

hsk score 720

2017/01/31 16:59  投稿

もしかして
```VBA
Private Sub Application_ItemLoad(ByVal Item As Object)
   Dim mailItem As mailItem
   Set mailItem = Item
   
   If mailItem.Display() Then
   
   Else
   
   End If
End Sub
```
のようにしているのでしょうか?
mailitem.Display() は戻り値がないメソッドですので、If 文には判断のしようがないのでしょう。
mailitem.Display() は戻り値がないメソッドですので、If 文には判断のしようがないのでしょう。
「特定のメール」「何らかの処理」が、具体的に何なのかを書いていただければ、具体的な回答が得られると思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る