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

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

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

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

マクロ

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

Q&A

解決済

1回答

5494閲覧

Excel365 VBAでOutlookの共有の予定表を取得したいが、ある人数に達するとフォルダが取得できない。

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

マクロ

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

0グッド

0クリップ

投稿2020/10/16 12:46

会社でOutlook365で予定表を付けていますが、全社員の共有の予定表をOutlookで確認する代替手段として、Excelシートで確認したいニーズが出て、VBAマクロを作りました。(社員数は300人強)

基本的なコードは以下の通りですが、ループが100人を越えた時に、
『Microsoft Outlook:インフォメーション ストアを開けませんでした。』というエラーが
「GetSharedDefaultFolder」を呼び出した時に発生します。
※以下の★で "氏名101” を処理しようとしたタイミングです。(1つずれることもありますが)

VBA

1Sub TestGetAppointments() 2 Dim olApp As Outlook.Application 3 Dim olNms As Outlook.Namespace 4 Dim olRecip As Outlook.Recipient 5 Dim olFolder As Outlook.Folder 6 Dim olItem As Outlook.AppointmentItem 7 Dim sNames(), sName 8 On Error GoTo CATCH_ERROR 9 10 sNames = Array("氏名1", "氏名2", "氏名3" .... "氏名101" ... "氏名200") 11 Set olApp = New Outlook.Application 12 Set olNms = olApp.GetNamespace("MAPI") 13 For Each sName In sNames 14 Set olRecip = olNms.CreateRecipient(sName) 15 If Not olRecip.Resolve Then Err.Raise 65535, "olRecip.Resolve", "Unknown: " & sName 16 Set olFolder = olNms.GetSharedDefaultFolder(olRecip, olFolderCalendar) ★ 17 For Each olItem In olFolder.Items 18 Debug.Print olItem.Subject & "(" & olItem.Start & "-" & olItem.End & ")" 19 Next olItem 20 Set olFolder = Nothing 21 Set olRecip = Nothing 22 Next 23 Set olNms = Nothing 24 Set olApp = Nothing 25 Exit Sub 26 27CATCH_ERROR: 28 MsgBox "ERROR: " & Err.Source & ":" & Err.Description 29 Set olNms = Nothing 30 Set olApp = Nothing 31End Sub 32

一度に処理(CreateRecipient+GetSharedDefaultFolder)できる人数の上限といった制約があるものでしょうか?
仮にそうだとすると、Excelマクロを閉じて、開きなおして、再度実行する時は、"氏名101"から始めれば良さそうに思えますが、氏名101で同じエラーが起きます。

ということは、CreateRecipient+GetSharedDefaultFolderすると、Outlookの自分の予定表フォルダに他人の共有予定が取り込まれ、それが上限に達している状態で、それを解放しないと、それ以上の他人は取得できない(GetSharedDefaultFolderのエラーは解消しない)、ということでしょうか?だとした場合は、どうすれば解放できるでしょうか?

おわかりになる方にアドバイスいただけると助かります。
よろしくお願いいたします。

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

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

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

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

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

sinzo

2020/10/19 01:25

For Each sName In sNames からNextの間に n=n+1 Debug.Print n を入れて何件目まで実行できているか? エラーの出る人を外して、実行をして件数が増加するか? A,件数が増えれば、その方に対しての権限かなにか B.件数が増えなければ取り込んだ件数上限に達した。 c.その方の予定が入って、いる、いない Debug.Printに対して上限が在るのか?ですが
退会済みユーザー

退会済みユーザー

2020/10/19 02:12

ご助言、ありがとうございます。 AやCではなく、Bに該当します。 たまに若干ずれることもありますが、101人目に突入してGetSharedDefaultFolderがエラーになります。 現象から考えると、取り込む件数に上限があると思われますが、ネットを調べてもそれらしき記載や対処方法を見つけられずにいます。 ちなみに、再現しなくなったのですが、GetSharedDefaultFolderがエラーになった時は、Excelマクロが「別のプログラムでのOLEの操作が完了するまで待機します。」というダイアログを表示しました。別のプログラムはOutlook365のことだと思います。 予定表アイテムを実際に取得するのはOutlookで、それをOLEでEcel内に取り込んでいるのだと思います。となると、やはり、Outlook側の上限になるのでしょうか?
sinzo

2020/10/19 09:01

私が、「別のプログラムでのOLEの操作が完了するまで待機します。」に遭遇した時は Outlookに「重要な・・・アクセス・・・」(うる覚えですみません)のポップアップで パスワードの入力待ちになってました。 ちょっと前何かのテスト組んでた時なので、参考になるかわかりませんが。
退会済みユーザー

退会済みユーザー

2020/10/19 09:19

ありがとうございます。 その表示は、Outlookの「セキュリティ警告」のダイアログかもしれません。 当方の場合は、とくに問題はないはずなのですが、Outlookを起動した時に「サーバのセキュリティ証明書に問題があります…云々。続行しますか?」に「はい/いいえ」の画面が表示され、いつも「はい」を押しています。 なお、詳細が不明ですが、社内でメンテナンス作業があり、それが終わった後、エラーが起きずに全社員(約300人)の共有予定が正常に取得できました。なので、サーバ側で何か作業用に制限をかけていたのかもしれません。 ご助言、ありがとうございました。
guest

回答1

0

ベストアンサー

社内メンテナンス作業による制限がかかっていた模様で、それが終了した後は、記載したVBAコードで問題は発生しませんでした。

投稿2020/10/19 15:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問