当方VBA初心者です。みなさんのおかげで少しずつ理解が進んでますが,
自力では解決できそうにないので,アドバイスをお願いします。
下記のマクロはうまくいくって,アカウント以下のフォルダー名を取得できますが,
Dim objNamespace As Namespace
Dim MyFolder As Folder
Dim objInbox, objMailbox, objOutlook As Object
Dim Myaccount As Account
Set objNamespace = GetNamespace("MAPI")
Set objOutlook = CreateObject("Outlook.Application")
Set objMailbox = objNamespace.Folders("****@***.jp")
(****@***.jp はoutlookのアカウントです。)
For Each MyFolder In objMailbox.Folders
Debug.Print MyFolder.Name
Next
下記のようにしてしまうと
Dim objNamespace As Namespace
Dim MyFolder As Folder
Dim objInbox, objMailbox, objOutlook As Object
Dim Myaccount As Account
Set objNamespace = GetNamespace("MAPI")
Set objOutlook = CreateObject("Outlook.Application")
For Each Myaccount In Session.Accounts
'メールボックスの全てのフォルダを取得
Set objMailbox = objNamespace.Folders(Myaccount)←←←ここでエラー
For Each MyFolder In objMailbox.Folders
Debug.Print MyFolder.Name
Next
Next
Set objMailbox = objNamespace.Folders(Myaccount)の部分でエラーになります。
「型が一致しません。」のエラーになります。
多分初歩的な間違いをしてるのだと思いますが,アドバイスお願いできればと思います。
No.1ベストアンサー
- 回答日時:
こんばんは、
なぜうまくいっている処理があるのに変えるのかわかりませんが、、
ご質問に対して、、
変数 Myaccount は、 In Session.AccountsなのでObject型だと推測します。For Each Myaccount In Session.Accountsの後には、Stringになっているように見えるのですが、、objNamespace.Folders(Myaccount)でエラーが返されるのだから、Object型だと。(この辺は詳しくありません)
エラー回避するための方法で思いつくのは、2通り
1つはobjNamespace.Folders(CStr(Myaccount)) でもなんかしっくりこないかと思います。
2つ目は、objNamespace.Folders(Myaccount.DisplayName)
こちらの方が、良い様な気がします。
ただ、注意として、あくまでOutlookで表示されるアカウント名ですね。
Outlookの使い方によっては、Session.AccountsとDisplayNameは一致しない場合があります。
No.2
- 回答日時:
#1です。
訂正します。Session.AccountsとDisplayNameは一致しない場合があります。間違い。
頓珍漢な事を書いてしまいました。
書きたかった事は、アカウント名とデータファイルフォルダー名と同じでない場合がありますので、その場合、取得できないないので
objNamespace.FoldersでループしてNamespaceTopFolderを探し出す必要があるかもしれません。
適切なアドバイスありがとうございます。
今まで,無からは学習できないので,先達のマクロ等を参考に,
その一部分を自分なりに書き換え,動作するマクロ(プログラム)を
集めて,自分なりのものを作っていました。
今回も,動作するマクロをご提示いただいたのですが,
自分なりのものをということで,あれこれやりました。
別なマクロに,
既定以外のホルダーにアクセスするのに,
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objInbox = objNamespace.GetDefaultFolder(olFolderInbox)
'受信トレイの取得
strFolderName = objInbox.Parent
'受信トレイの階層上位=受信トレイ以外のフォルダ オブジェクト取得
Set objMailbox = objNamespace.Folders(strFolderName)
'メールボックスの全てのフォルダを取得
Set objFolder = objMailbox.Folders("処理済")
'処理済みメールの移動先をフォルダ名を指定
というような設定で,既定の受信トレイから上にさかのぼって,
既定以外のフォルダーにたどり着くというマクロがありました。
それで,strFolderName がアカウントの事だろうと思い,
質問のマクロを考えました。
strFolderName がObjectの設定でしたので,大丈夫だと思ったら,
エラーになってしまったという次第です。
アカウントを操作するのに,Session.Accounts あるいは,Store 等の
どのObjectを使えばいいのか解らないレベルです。
それから,今回の質問でお答えいただいた方法,どちらも大丈夫でした。
ただ,objNamespace.Folders(Myaccount)のMyaccountを
なぜStringにしないといけないのか,???です。
学習しなければならないことは,山積みです。
もうじき70才になろうとしているおじいちゃんの私に,どれだけ
できるかななんて,考えています。(笑)
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
マクロで"#N/A"のエラー行を削...
-
お助けください!VBAのファイル...
-
String""から型'Double'への変...
-
VBでSQL文のUPDATE構文を使った...
-
インポート時のエラー「データ...
-
VBAでfunctionを利用しようとし...
-
実行時エラー'-2147467259(8000...
-
Python openpyxlを使用したセル...
-
実行時エラー 438 の解決策をお...
-
VBA データ(特定値)のある最...
-
VB.net 重複チェックがしたいです
-
文字列内で括弧を使うには
-
フランスの生年月日(jj/mm/aaaa)
-
html5 エラー
-
pythonのopenpyxlについて
-
【VBAエラー】Nextに対するFor...
-
error C2664: 'LPCTSTR' に変換...
-
日付書式のString型からData型...
-
Excel VBA 複数ブックシートご...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
ACCESSで値を代入できないとは?
-
VB.net 重複チェックがしたいです
-
ActiveCell.FormulaR1C1の変数
-
ApplicationとWorksheetFunctio...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
フランスの生年月日(jj/mm/aaaa)
-
【マクロ】 IFERROR関数をマク...
おすすめ情報