質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

3回答

5385閲覧

コンパイルエラーの原因が分からない

ppap115

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/05/28 01:08

VBAでメール本文から文章を抽出したく、下記サイトを参考に実行したのですがエラーになり、原因が分かりません。

https://tonari-it.com/outlook-vba-mailitem-body/

エラーメッセージ

コンパイルエラー ユーザー定義型は定義されていません

ソースコード

Sub Get_MailBody()
Dim objItem As Object
Dim objIns As Inspector
Dim lngStart As Long
Dim lngEnd As Long

Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem

With objItem MsgBox Mid(objItem.Body, Len("【作業時間】") + 1, (InStr(objItem.Body, vbCrLf) - Len("【作業時間】") + 1)) End With

End Sub

試したこと

参照設定での定義がされていないのではないかと、下記画像の箇所にチェックを入れました。
イメージ説明

使用しているのはOffice 2013です。
エラーの原因をご教示頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattuwan

2020/05/28 02:31

>使用しているのはOffice 2013です。 OutlookのVBAで本文を取り出そうとしているのでしょうか? そうならば参照設定が不要でしょうし、 ほかのアプリからメールを取り出したいなら、 参照設定が必要になります。 Officeというのは各アプリのセット?パッケージ?の総称?
ppap115

2020/05/28 04:27

Outlookのメール本文の中から欲しい情報を抽出して、エクセルの指定したセルに出力したいです。 Microsoft Officeの2013年版を使用しています。 エクセルのVBAを使うイメージで質問したのですが、この回答を頂いて私が操作しようとしていたものがOutlook VBAだったことに気づきました。
mattuwan

2020/05/29 08:12

Excelからメールにアクセスするなら、どのフォルダのどんなメールを探したいのでしょう? そこまでのサンプルが必要でしょうか? Webで検索したらサンプルが転がっていそうだとは思いますが。
guest

回答3

0

質問依頼内容の確認です。
初めの参照設定にはOutlook 15.0 Objectがありませんので、OutlookVBAからExcelへ書き込むのではなく、Excel(又はWord)VBAからOutlookを起動してその内容をExcelへ書き込みたいと言う御趣旨ではないですか。
ExcelVBAからであれば下記を貼り付けて動かして見て下さい。
デフォルトアカウントの受信フォルダーのBodyデータ取得ができると思います。
(Outlook 12.0 Object Libraryでは動きました)

Sub Test_Sample_Miniature() Dim Outlook As New Outlook.Application Dim myNamespace As Outlook.Namespace Dim myTasks As Outlook.Folder Dim Item As Outlook.MailItem Set myNamespace = Outlook.GetNamespace("MAPI") Set myTasks = myNamespace.GetDefaultFolder(olFolderInbox) myTasks.Display For Each Item In myTasks.Items MsgBox Item.Body Next Outlook.Quit End Sub

ご参照されたページは動作環境の記載が全くありませんので、公開された方の環境で動いているだけで、他のPC上でそのまま動く様には見えません。
下記ページが参考になるかと思います。
https://docs.microsoft.com/ja-jp/office/vba/api/outlook.namespace.getdefaultfolder
https://qiita.com/Q11Q/items/ac14d96c00e707de5d13
http://www.ken3.org/cgi-bin/group/vba_outlook.asp

投稿2020/05/31 07:14

編集2020/06/01 05:06
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こちらはOutlookVBAに記述するコードですね。
Outlookの画面でAlt+F11でVBEを開いて記述して実行してみてください。

投稿2020/05/28 01:31

ryuno_vanilla

総合スコア119

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppap115

2020/05/28 01:49

ご回答ありがとうございます。 Outlookの画面で実行したところ値が表示されました。 これを指定したエクセルのシートに出力したいのですが、どのような処理が必要でしょうか?
DreamTheater

2020/05/28 02:54

Outlook上のVBAから目的のExcelブックを開いてシート操作して保存という流れになると思います。 OutlookからEXCELを操作するので、恐らく参照設定に以下追加が必要です。 Micrsoft Excel X.XX Object Library
ppap115

2020/05/28 04:28

ありがとうございます。 こちらを参考にして作業してみます。
DreamTheater

2020/05/28 23:19

ryuno_vanillaさんの回答にコメントしてしまいました。 すみませんでした。
ryuno_vanilla

2020/05/29 01:02

全然大丈夫です。すぐにコメントできなかったので、コメント助かりました。
guest

0

Microsoft Outlook 16.0 Object Libraryを参照設定に追加したらどうでしょうか?
※バージョン(16.0)は環境により異なると思います。

投稿2020/05/28 01:17

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppap115

2020/05/28 01:26

ご回答ありがとうございます。 Microsoft Outlook 15.0 Object Libraryがあり追加しました。 新たに「実行時エラー'438':オブジェクトは、このプロパティまたはメソッドをサポートしていません」というエラーが表示されました。私の使用しているOffice 2013では対応していない構文なのでしょうか?
DreamTheater

2020/05/28 01:39

OutlookのVBAとして実行してますか? そもそもOutlookのVBAであれば、デフォルトでMicrosoft Outlook XX.X Object Libraryが追加されていると思いますが、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問