三流君の
[コンビニ系HPへ]
[VBA系HPへ]
[ASP系HPへ]
[愚痴系HPへ]
Excel97 VBA からOutLookデータを読む
関連項目
[No.55 Outlookを操作してメールを送りたい]
[No.56 Outlookから複数のアドレスにBCC送信]
[No.57 Outlook メールアイテムの形式でハマる]
上記解説もあわせてみて下さい
実物を確認したい方は、→022.LZH 16KB
をダウンロードして、見てください。
Excel97 -- OutLook97 のサンプルが入っています
ウォッチで変数の中身を確認(オブジェクトが階層になってます)

イミディエイト ウインドウで
? 変数名で、実際の中身を確認しながら、イメージをつかむ

サンプル実行結果(一部です)

/*
* 3.サンプル
*/
Excel97 VBA からOutLook97データを読んでみました。
test4が完成版です。
*Access や VBでも、結果の書き込み部分だけ変更すれば、
動作すると思います。
'----- ここから
'TEST()は、Access,VBでも、動作すると思う。
Sub TEST()
'Outlook にアクセスして、フォルダー名?をMsgboxで表示
'テストバージョン
Dim olAPP As Object
Dim olNameSPC As Object
Dim nFCNT As Integer
Set olAPP = CreateObject("Outlook.Application")
Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト
'MsgBox olNameSPC.Folders.Count
For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count
MsgBox olNameSPC.Folders(1).Folders(nFCNT).Name
Next nFCNT
End Sub
Sub TEST2()
LookOutLookMSG ("受信トレイ")
'↑半角で打ってください、
End Sub
'フォルダー名を受け取り、メッセージを表示、、デバック中?
'これも、Access,VBでも、動作すると思う。
Sub LookOutLookMSG(strFNAME As String)
Dim olAPP As Object
Dim olNameSPC As Object
Dim objItem As Object
Dim dteCreateDate As Date
Dim strSubject As String
Dim strItemType As String
Dim strBody As String
Dim intCounter As Integer
Dim strOKNG As String
Dim strMSG As String
Dim nFCNT As Integer
Set olAPP = CreateObject("Outlook.Application")
Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト
'MsgBox olNameSPC.Folders.Count
strOKNG = "NG"
For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count
If olNameSPC.Folders(1).Folders(nFCNT).Name = strFNAME Then
strOKNG = "OK"
Exit For '見つかったので抜ける
End If
Next nFCNT
If strOKNG = "NG" Then
MsgBox strFNAME & "フォルダーは、見つかりませんでした"
Exit Sub
End If
For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items
intCounter = intCounter + 1
With objItem
dteCreateDate = .CreationTime
strSubject = .Subject
strItemType = TypeName(objItem)
strBody = .Body
End With
strMSG = vbTab & "アイテム番号" & intCounter & " - " _
& strItemType & " - 作成日 " _
& Format(dteCreateDate, "yyyy/mm/dd hh:mm am/pm") _
& vbCrLf & vbTab & vbTab & "件名 : '" _
& strSubject & "'" & vbCrLf _
& strBody
If MsgBox(strMSG, vbOKCancel) = vbCancel Then
Exit For
End If
Next objItem
End Sub
Sub test3()
Dim strInName As String
strInName = InputBox("名称を入れてください")
LookOutLookMSG (strInName)
End Sub
'TEST4()は、ワークシート系のプロパティ、、
'を使っているので、Excelだけで、動作します。。チョット改造してください。
Sub test4()
Dim olAPP As Object
Dim olNameSPC As Object
Dim objItem As Object
Dim dteCreateDate As Date
Dim strSubject As String
Dim strItemType As String
Dim strBody As String
Dim intCounter As Integer
Dim strMSG As String
Dim nFCNT As Integer
Dim nYLINE As Integer
Workbooks.Add '新規ブックを作成する
Set olAPP = CreateObject("Outlook.Application")
Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト
nYLINE = 1
For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count
'フォルダーの名称を書き込む
Cells(nYLINE, 1) = olNameSPC.Folders(1).Folders(nFCNT).Name
nYLINE = nYLINE + 1
'見出しを書き込む
Cells(nYLINE, 1) = "No."
Cells(nYLINE, 2) = "タイプ"
Cells(nYLINE, 3) = "作成日"
Cells(nYLINE, 4) = "件名"
Cells(nYLINE, 5) = "内容"
nYLINE = nYLINE + 1
'メッセージ数分ループ
For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items
intCounter = intCounter + 1
'変数に代入(セルに直接でもいいかも?)
With objItem
dteCreateDate = .CreationTime
strSubject = .Subject
strItemType = TypeName(objItem)
strBody = .Body
End With
'セルに代入
Cells(nYLINE, 1) = intCounter
Cells(nYLINE, 2) = strItemType
Cells(nYLINE, 3) = dteCreateDate
Cells(nYLINE, 4) = strSubject
Cells(nYLINE, 5) = strBody
'セット位置を移動
nYLINE = nYLINE + 1
Next objItem
nYLINE = nYLINE + 1
Next nFCNT
'楽して、Excelの自動サイズ調整を使用する
Columns("A:E").EntireColumn.AutoFit
Range("A1").Select
End Sub
'----- ここまで
/*
* 4.サンプル解説
*/
簡単に、解説します。
ア.オブジェクト"Outlook.Application"?
前回、VBAからExcelを操作したときと同様に、
Set olAPP = CreateObject("Outlook.Application")
で、オブジェクトを参照できるようにします。
なんで、
Outlook.Application
なの?
そんなのExcelVBAヘルプに載ってないよ。
えっと、MSDN(マイクロソフトデベロッパーネットワーク)
のCDで、Outlookで検索したら、載ってました。
じゃ、それないと、わからないの?
ですね、、、今回のも、そこに載ってたサンプルを少し改造したものです。
* Outlook Express の設定方法、わからなかったので、
ご存知の方は、教えてください。
Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト
で、メッセージのオブジェクトを作って、
(サンプルそのまんまジャン)
For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count
MsgBox olNameSPC.Folders(1).Folders(nFCNT).Name
Next nFCNT
テストなので、メッセージボックスで、フォルダー名を表示してます。
イ.メッセージの参照方法
オブジェクトフォルダーの中に、メッセージが入っています。
それを、
For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items
のループで1件、1件、取り出してます。
実際の参照は、
With objItem
dteCreateDate = .CreationTime
strSubject = .Subject
strItemType = TypeName(objItem)
strBody = .Body
End With
で、作成日・件名・タイプ・内容
を変数に取り出してます。
ウ.なんで、オブジェクトの構造が?
テメエはなんで、オブジェクトの構造が?ヘルプに載ってないのに、
わかるんだ?ほんとは、どっかに載ってんだろ、
隠さないで、教えな。
だから、MSDNからです、サンプルを修正しただけって行ってるジャン。
もし、調べたり、イメージ・構想が知りたかったら、
デバックモードでとめて、
ウォッチで変数名を指定して、中身を見るか、
イミディエイトウインドウで? 変数名で表示してみるとか、、
やってみてください。
なんとなく、わかったような、かわされたような、、、
枠外解説・グチ --- 知識じゃなくて、調べ方が知りたい?
もう、いろいろなソフトやOSがここまで、大きくなってくると、
全てをオボエル?のは、不可能です(だと、おもいます)
Accessのフィールドのプロパティぐらいは、
なんとか全部知ってるけど(←うそです、見栄はってます)
次から次と、ソフト、出てくるし、バージョンアップするし、、、
単語の意味を知ってるのも、大事ですが、
辞書の引き方、調べ方の効率の良い方法を知りたいなぁ
と最近思います。
正直、MSDNも、いっぱい情報あって、うまい引き方がわからないです。
(今回、Outlook Express の方法が探せなかった)
う〜ん、、、長くなりそうなので、この話題も、機会があったら、続きを、、、
/*
* 5.積み残し、残作業項目(食い残し)
*/
食後のイップク、、、と行きたいところですが、
まだまだ、食べ残しがあります。
ア.Outlook Express
Outlook Express のオブジェクトの作り方、
構造がわからなかった。。
イ.階層が深いとき
受信トレイにメールマガジン・個人関係・仕事関係・その他
など、トレイの下にフォルダーを作成して、
メールを管理している場合、対応していない
ウ.質問はAccessのリンクだったでしょ
質問内容、読み返すと、
Accessのリンクテーブルを作成して、
リンクにして?直接参照したい
みたいなこと書いてあったけど、
私のやり方だと、データを取り出す?ぐらいはできそうだけど、、
エ.将来の自分のために
送り主のメールアドレスを調べて、そのメールだけをAccessに
インポート。
または、ルールを付けて、件名に、「発注」が入っていたらなど。
*また、一言いい?
いいですよなんでも?
Outlookのメール仕分け機能で、
このアドレスだったら/この件名だったら、発注フォルダーに移動、
って、やって、1つにまとめて、
テメエが作った、メッセージ取りだしサンプルを改造すれば、
できるんじゃないの、、自分で全部やらなくてもさ、、
/*
* 6.終わりの挨拶
*/
今回、なんとなく?わかりましたか?
あまり、噛み砕いてないので、消化しにくいですが、
サンプルを実行して、処理を見ながら、1つ1つ食べてみてください。
オブジェクト参照で、いろいろ、面白そうな処理、できそうですね。
もっとオブジェクトやメソッドを研究すると、
登録されているアドレス帳を調べてメールを送る、、
なんて、悪い処理も作れそうですね。。
めずらしい食べ物(要望・質問)
や
調理方法(処理方法?)、味付けの方法(小技・テクニック?)
あったら、気軽に掲示板に。
*素人さんからのメール、料理の鉄人さんからのメール待ってます。
では、また。 かぜぎみで調子の悪い三流PGのKen3でした。
*テメエが調子悪いのは、いつもだろ、、、
今日は、もう、かんべんしてね。。。
(ヒマな人は、下のワク外通信も見てください)
...
■番外編 愚痴系で書いてた今日の一品 (短いサブ関数など)
2000/05/13 SQL Count関数を使ってみる
2000/05/11 Access97 標準関数Midなどが使えない
2000/05/09 SendObjectのエンコード
2000/05/08 クエリーで〜以外とは
2000/04/27 Imagingコントロールを使ってみた
2000/04/25 Excel97 VBA イベントなど
2000/04/24 Access97で複数のプリンタを切替えて使用
2000/04/20 書式付きエクスポート DoCmd.OutputToで、できます
2000/04/19 Access97でExcel形式へExport時に書式設定を行いたい
2000/04/13 Access97でOutlook97/98とリンクする方法
2000/04/13 VBA Nameステートメント
2000/04/04 Accessでキー取得
2000/04/04 AccessでFile参照ダイアログ?
2000/04/03 縦書用数値変換改良
2000/04/01 Access Err テーブルを消したい
2000/03/31 縦書き数値、どうしてますか?
2000/03/29 VBA 手抜きで、処理後、explorerを開く
2000/03/28 Access --> Word へデータ
2000/03/24 名前一覧Excelの機能で、同じことできました
2000/03/23 Excel97 VBA セルに付けた名前一覧を作成する
2000/03/21 Excel セルに名前付け
2000/02/25 iniFileを読む GetPrivateProfileString
2000/02/15 Excel VBA Rangeオブジェクトとサンプル
2000/02/14 Access97 SizeMode/OLEサイズ で画像調整
2000/02/10 Access97 Pictureプロパティとサンプル
2000/02/09 Access97 集計クエリーで重複値をハジク
2000/02/07 Access97 サブフォームへ値をセット
2000/02/04 Access97 コントロールソース、チョットした使用法
2000/02/01 Access97 フォームフッター
2000/01/18 Access97 now()関数で有効期限処理、、、
_/_/
_/_/
_/_/
_/_/
_/_/
三流君のHP主な飛び先
人気ページ/アクセスランキング
↑一週間の訪問者数と人気のページを表示してます
その他、宣伝ページです
・[
アンケート/ポイント]などで月500円を必死に稼いでます(笑)
・[
SOHO/在宅プログラマー/派遣]の話題、Webエントリー後の反応など
・[
出会い系]のお話、自分で出会い系のシステム作れないか?探ったお話
・[
ネットで小金を稼げるか?]実験中だが成果は無し
※あとは、[パソコン関係の書籍]や[ゲームソフト]、
[パソコンパーツ]
をバナーから売ろうとするけど、
なかなかうまくはいかないよね(笑)
|
←パソコンの技術系の書籍を探しているなら
コンピュータ関連の出版社33社(アスキー、インプレス等)が共同運営するコンピュータの本・専門店
※種類が豊富で探し易い※在庫ありが48時間以内発送
|
プログラム系、流れや基本系?
[No.4 プログラムって?流れって?]
[No.5 変数・乱数・定数]
[No.8 配列とArray関数]
[No.9 If文で範囲のチェック]
[No.10 Select Case XX To XX と Is >= XX]
[No.11 InputBox関数で簡単な値を受け取る]
[No.12 入力結果の判断いろいろ]
[No.19 Exit Subで途中退場する]
[No.20 配列変数ですっきりと?(2次元配列)]
[No.21 変数の型を意識する]
[No.22 関数って?Subプロシージャを呼ぶ]
[No.23 値を返すユーザー関数、Function関数]
[No.24 関数のパターンを少し]
[No.35 イベント処理について]
[No.36 オブジェクトのプロパティについて]
[No.37 オブジェクトのメソッドについて]
[No.45 歌詞の表記を参考に関数を作成]
[No.73 オブジェクトのループはFor Each In でループさせる]
VBA関数
[No.3 Dir関数でファイルの存在をチェックする]
[No.17 Val関数で文字列を数値に変換してみた]
[No.18 文字列を数値に変換、CIntで変換]
[No.38 キャラクタコード?って何? Chr関数、Asc関数]
[No.39 StrConv関数で半角を全角文字にしてみた]
[No.40 Len関数で遊ぶ、遊ばれる]
[No.72 文字列を日付型に変換、Cdateへの値の渡し方いろいろ?]
[No.77 Not演算子で細工する、プログラムはパズルのように...]
Excel関係
[No.28 Excelのグラフをgifへ変換 .Exportメソッド使用]
[No.43 セルのB3を参照するには?]
[No.44 Cells(257)とCells(2,1)の関係]
[No.49 Excel Rows(n).Select で行選択]
[No.47 Excel Application.GetOpenFilenameでファイル名取得]
[No.60 Cancel=Trueの使い方(例題:Excel 右クリック禁止)]
[No.51 Excel Range オブジェクトを使う]
[No.86 Excel 起動オプションのお話(引数的なラブレターを渡したい)]
Excel UserForm
[No.30 Excel UserForm テキストボックスのイベント]
[No.32 Excel UserForm_KeyDownイベント発生条件]
[No.34 ┌ ─ ┐│└ ┘を使って、文字列を囲ってみたい]
[No.42 ExcelのForm シートと連動させる]
[No.46 カウンタで先頭行チェック、空白で終わりの判断]
[No.61 Excel Form 閉じる方法 Unload Me]
[No.63 Excel UserForm で データ・フォームの機能を真似てみる]
[No.68 Excel Formで値を設定、標準モジュールで使用したい]
[No.84 Excel UserFormでコンボボックスを使用してみた]
Access 関係
[No.1 いきなりサンプルじゃぁねぇ、、文句の一つ言いたいよ]
[No.75 空のMDBを作成後、DoCmd.CopyObjectでテーブルコピー]
[No.85 Access クエリーで演算フィールドを使ってみる]
Access フォーム
[No.41 AccessのForm .Pictureプロパティで画像参照]
[No.62 Access フォームでパスワード入力(入力後*****表示)]
[No.65 Access Form TextBoxの.SelLength .SelStartプロパティ]
[No.66 Access ユーザーマスターのチェックとメニュー切り替え]
[No.67 Access Formを隠す Me.Visible = False (Closeとの違い)]
[No.69 Access コンボボックスを自動で開きたい]
Access レポート
[No.74 Access 列型レポートの左端に印刷したい]
[No.76 Access レポート Me.NextRecord = Falseで移動を止める]
Access から Excel 連携
[No.2 AccessからExcel出力]
[No.7 MDBと同フォルダのExcelファイルを開く]
[No.13 Excel セルに名前を付けてみる]
[No.14 Excel 隣のシートを参照して逃げる]
[No.48 AccessからExcelブックを開き、書式設定を行う]
[No.54 AccessからExcel開いて、処理終了後に閉じたい]
[No.58 Access クエリーを Excel既存シートへ エクスポート]
[No.59 Excelのマクロ付きフォーマットを壊されないように]
[No.64 AccessからExcelファイルを開いて・印刷して・閉じたい]
Excel から Access 連携
[No.15 ExcelからAccessのフォームを開いてみました]
[No.16 ExcelからAccessのモジュールを呼んでみました]
テキストファイル処理
[No.27 テキストファイル処理 ファイルへの書き込み]
[No.29 テキストファイル処理 ファイルからの読み込み]
[No.31 Write #で ””を付けた書き込み]
[No.33 FreeFile関数で空いてるファイル番号を返す方法]
インターネットエクスプローラーの操作(InternetExplorer.application)
[No.50 IE起動 CreateObject("InternetExplorer.application")]
[No.52 InternetExplorer.application .document.body.innerText]
[No.53 文字列を探す、InStr関数の使い方]
[No.70 InternetExplorer.application .document.all(0).innerHTML]
[No.71 IE操作 リンク先を取出す .Document.links(i).href]
Outlookを操作する
[No.55 Outlookを操作してメールを送りたい]
[No.56 Outlookから複数のアドレスにBCC送信]
[No.57 Outlook メールアイテムの形式でハマる]
[No.78 Outlookでファイルを添付するには?.Attachments.Add]
FTPの設定ファイルを作成してみた
[No.25 コマンドラインのFTPを使ってみた]
[No.26 FTP -n オプションとuserコマンド]
Excel HTML表作成ツールもどき
[No.80 Excelのセル範囲をHTMLの表(.html)にしてみる]
[No.81 セルの右寄せ、中央寄せをHTMLの表にしてみる]
[No.82 背景色、フォントカラーをHTMLの表にしてみる]
[No.83 改行LFを<BR>などHtml用にエンコードして書き込む]
その他
[No.6 ファイルの起動場所を知る方法]
[No.79 SJIS--JISコードの文字列を作成したい]
...
挨拶
最後まで読んでいただき、どうもです。
失敗続きのAB型の変わり者 三流プログラマー Ken3です。
[Excel/Access VBA],[
ASP(Active Server Pages)]の解説
[
プログラマーの愚痴]、[
元コンビニ店長時代の話]
をネタにしてHP作成、メルマガ書いてます。
最近、[初心者にやさしいプログラム]の解説と[
ネットで稼ぐ小悪テク]の解説を始めようかなぁと思ってます。
...