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

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

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

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

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

Q&A

解決済

2回答

9456閲覧

VBA CreateObject("Outlook.Application") 429のエラー原因が分からない

ludolf

総合スコア39

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

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

0グッド

1クリップ

投稿2020/07/02 10:29

編集2020/07/03 09:23

いつもお世話になっております。

早速ですが、VBAでOutlookを自動で開くプログラムを作成しているのですが、表題の件で実行が出来ません。
他のPCで実行するとすんなり出来るためコード自体には問題は無さそうです。

以下のサイトが参考になるかなと思っておりますが、「オートメーション サーバーをチェックします。」と「システムをチェックします。」の欄がまるで何をやっているのか分からないため、困っております、、

https://support.microsoft.com/ja-jp/help/828550/you-receive-run-time-error-429-when-you-automate-office-applications

どなたか表題と同じ症状にあった方、原因に心当たりがある方何でもいいのでご教授頂ければ幸いです。

ソースは下記になります。
エラー箇所は「Set outlookObj = CreateObject("Outlook.Application")」になります。

VBA

1Sub sendmail_sample1() 2'---本日のブックチェック 3 Dim ws As Worksheet, flag As Boolean 4 For Each ws In Worksheets 5 If ws.Name = Format(Date, "mmdd") Then flag = True 6 Next ws 7 If flag = True Then 8 '---すべてのブックを保存 9 Dim wb As Workbook 10 For Each wb In Application.Workbooks 11 wb.Save 12 Next wb 13 14 '---コード1|outlookを起動する 15 Dim toaddress, ccaddress, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先 16 Dim subject, mailBody, credit As String '変数設定:件名、メール本文、クレジット、添付 17 Dim outlookObj As Outlook.Application 'Outlookで使用するオブジェクト生成 18 Dim mailItemObj As Outlook.MailItem 'Outlookで使用するオブジェクト生成 19 'Dim book1 As Workbook 20 21 'Set book1 = Workbook 22 'ThisWorkbook.Saved = True 23 24 '---コード2|差出人、本文、署名を取得する--- 25 toaddress = Range("B2").Value 'To宛先 26 ccaddress = Range("B3").Value 'cc宛先 27 bccaddress = Range("B4").Value 'bcc宛先 28 subject = Month(Now) & "/" & Day(Date) & "(" & WeekdayName(Weekday(Date)) & ")" & " " & Range("B5").Value '件名 29 mailBody = Range("B6").Value 'メール本文 30 credit = Range("B7").Value 'クレジット 31 32 '---コード3|メールを作成して、差出人、本文、署名を入れ込む--- 33 Set outlookObj = CreateObject("Outlook.Application") 34 Set mailItemObj = outlookObj.CreateItem(olMailItem) 35 mailItemObj.BodyFormat = 3 'リッチテキストに変更 36 mailItemObj.To = toaddress 'to宛先をセット 37 mailItemObj.cc = ccaddress 'cc宛先をセット 38 mailItemObj.BCC = bccaddress 'bcc宛先をセット 39 mailItemObj.subject = subject '件名をセット 40 41 '---コード4|メール本文を改行する 42 mailItemObj.Body = mailBody & vbCrLf & vbCrLf & credit 'メール本文 改行 改行 クレジット 43 44 '---コード5|自動で添付ファイルを付ける--- 45 Dim attached As String 46 Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成 47 Set myattachments = mailItemObj.Attachments 48 attached = Range("B9").Value & ThisWorkbook.Name '添付ファイル 49 50 myattachments.Add attached 51 52 '---コード5|自動で添付ファイルを付ける--- 53 Dim attached2 As String 54 Dim myattachments2 As Outlook.Attachments 'Outlookで使用するオブジェクト生成 55 Set myattachments2 = mailItemObj.Attachments 56 attached2 = Range("B10").Value '添付ファイル 57 myattachments.Add attached2 58 59 '---コード6|メールを送信する--- 60 mailItemObj.Save '下書き保存 61 mailItemObj.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない) 62 'objMAIL.Send 63 64 '---コード7|outlookを閉じる(オブジェクトの解放)--- 65 66 ' Application.Wait Now() + TimeValue("00:00:03") 67 68 'If Application.Wait = 3 Then 69 Set outlookObj = Nothing 70 Set mailItemObj = Nothing 71 Else 72 MsgBox Format(Date, "mmdd") & "が存在してないぞい。出直すがよい。" 73 End If 74 75End Sub

イメージ説明

イメージ説明

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

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

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

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

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

YT0014

2020/07/02 17:29

エラーが発生するPCに、Outlookはインストールされているのでしょうか?
ludolf

2020/07/03 00:06

ご質問ありがとうございます! はい入っております、「Ofice16」のOutlookをインストールしています。 また参照設定でOutlookを外部から開けるように設定も行っています。 念の為参照設定で何をチャックしているか載せておきます。
radames1000

2020/07/03 00:13

Outlookは手動で正常に起動しますか?
ludolf

2020/07/03 00:15

radames1000様ご質問ありがとうございます! はい、正常に動いております。 オプション設定をみてみて自分とのOutlookの差分も見当たらなかったです、、
guest

回答2

0

ベストアンサー

「CreateObject 429」のようなキーワードで検索すると、色々な記事がヒットしますが、試してみましたでしょうか?
例えば、
■Office アプリケーションを自動化する際に実行時エラー 429 が表示されます。
https://support.microsoft.com/ja-jp/help/828550/you-receive-run-time-error-429-when-you-automate-office-applications

追記

OutlookのCOM参照がなされているようですが、それならば、わざわざ遅延バインド

CreateObject("Outlook.Application")

を使う必要はなく、

Set outlookObj = New Outlook.Application

とした方がよいのではないかと思います。
(今回の問題もなくなるかも知れません。)

追記2

ストアアプリ版(UWP版)Officeの場合、COM公開方法が異なるとのことで、少なくともCreateObjectでのCOM生成はダメらしいです。
※以下はExcelについてですが、参考まで。
■UWP版Office(Excel)
https://azulean.me/2018/11/28/uwp%E7%89%88officeexcel/

投稿2020/07/02 23:59

編集2020/07/03 03:07
kenshirou

総合スコア772

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

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

ludolf

2020/07/03 00:22

回答ありがとうございます! はい自分も色々調べてこのサイトにたどり着きました。 「 CreateObjectまたは新規の中には、カスタム インターフェイスをマーシャ リングすることはできません」マーシャ リングという言葉の意味だったり、「normal.dot またはユーザー プロファイルのすべてのインスタンスには、ローカルのハード ディスクを検索します。」のnormal.dotがどこにあるのか等、実際に試そうにも言葉を理解できず修正できないでいます、、 VBAは趣味で始めたので本当にがちがちの初心者です、
kenshirou

2020/07/03 00:32 編集

回答に追記をしました。 「Microsoft Outlook 16.0 Object Library」を参照設定しているのであれば、わざわざ遅延バインド (CreateObject("Outlook.Application") )を使用するメリットはないのではないかと思います。 代わりに、Set outlookObj = New Outlook.Application を使います。 これでも同じ状況となるようであれば、別の問題があるかも知れませんね。
kenshirou

2020/07/03 03:08 編集

もしかして、Officeはストアアプリ版(UWP版)でしょうか? 回答にも追記しました(追記2)が、その場合、COM公開方法が異なるとのことで、少なくともCreateObjectでのCOM生成はダメらしいです。 ※以下はExcelについてですが、参考まで。  ■UWP版Office(Excel)   https://azulean.me/2018/11/28/uwp%E7%89%88officeexcel/
ludolf

2020/07/03 08:47

返信が遅くなり申し訳ございません、、 とても詳しくありがとうございます! UWP版というのがあるのですね、 kenshirou様のおっしゃる通りそこが怪しいですね 実際にやってみます! 現在問題のPCを使用している方がいるので、終わり次第修正してみます!
ludolf

2020/07/03 09:22

送ってみましたー 今度は同じ行でオートメーションエラーが出てきました。 その時のエラー画像を送付しましたので、またお力添えいただければと思います、、 「80070490」の部分ですが、調べて見るとWindowsUpdateができない時に出るエラーコードと同じらしいので、WindowsUpdateされているか念の為確認してみましたが、最新版になっておりました。
kenshirou

2020/07/04 03:25

ところで、 Set outlookObj = CreateObject("Outlook.Application") の代わりに、 Set outlookObj = New Outlook.Application と書いてもエラーになるでしょうか?
ludolf

2020/07/06 00:19

返信遅くなりもうしわけございません、 はい、一つ上で回答している内容になりました。 エラー内容をスクショして送付していますのが「Set outlookObj = New Outlook.Application」のエラーになります! エラー内容を改めてまた検索したのですが、最初の部分のエラーコードを調べたところWindowsDefenderというセキュリティーソフトで不具合が出ているのではないかと思って色々調べたのですが、特に異常はないようです、、 確認したのが、バージョンアップの有無やセキュリティーを一度オフにしてみて実行できるかなどを行いました。 念の為申し上げますと、セキュリティーソフトはESETをメインに使用しています。 よろしくお願いします!
kenshirou

2020/07/06 02:29

参照設定の画面をよく見たら、OutlookのObhect Libralyの場所が「C:\Program Files\WindowsApps...」になっていますね。 確かにこれはストアアプリ版(UWP版)ですね。(64bit版でしょうか。) UWP版はオートメーションがうまくいかないことがあるようです。 (管理者権限がないとダメとか...) ここら辺も調べた方が良いかも知れません。
ludolf

2020/07/06 05:08

>UWP版はオートメーションがうまくいかないことがあるようです。 UWP版のみおかしいように自分も感じてきました、 一応自分のPCでは「New」の書き方でも「CreateObject」でも動くので製品自体に問題がありそうですね、 ただ自分のPCも同じパスになっているので、なぜ動いているのかより謎が深まりました(笑) 管理者権限というのがあるのですね そこも重点的に調べて見ます! 解決はしていませんが、原因が分かったためベストアンサーにしたいと思います! 何日間も考えてくださって誠にありがとうございました^^
izuki_y

2022/01/05 04:58

横から失礼します。 自分も同じ様な事象でしたが、kenshirouさんの Set outlookObj = New Outlook.Application で上手く行きました。 Microsoft Outlook 16.0 Object Libraryの場所は C:\Program Files\Microsoft Office\root\Office16¥MSOUT.OLBです。 参考例として足跡残しておきます
guest

0

インストール先が\WindowsApps\となっていますが、正常なPCもそうですか。
こちらの環境は下記にて正常にCreateObject文は動きました。(場所:部分です)
イメージ説明

投稿2020/07/03 00:54

編集2020/07/03 06:20
tosi

総合スコア553

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

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

ludolf

2020/07/03 08:35

回答ありがとうございます! 正常なPCと同じパスでしたがエラーになっているようです、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問