![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
当方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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
ActiveCell.FormulaR1C1の変数
-
オブジェクト型の変数にフォー...
-
ACCESSで値を代入できないとは?
-
HTMLソースが表示のページのも...
-
VBでSQL文のUPDATE構文を使った...
-
MDBへレコード挿入中にエラーが...
-
マクロの「SaveAs」でエラーが...
-
【VBAエラー】Nextに対するFor...
-
String""から型'Double'への変...
-
実行時エラー´5854´ 文字列型パ...
-
インポート時のエラー「データ...
-
On ErrorでエラーNoが0
-
ApplicationとWorksheetFunctio...
-
VBA データ(特定値)のある最...
-
VBAで、Excelの選択範囲をWeb形...
-
現在、QueryTableが設定されて...
-
VBAのリストボックスで、横スク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
お助けください!VBAのファイル...
-
On ErrorでエラーNoが0
-
実行時エラー'-2147467259(8000...
-
文字列内で括弧を使うには
-
【VBA】ワークブックを開く時に...
-
実行時エラー 438 の解決策をお...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
ApplicationとWorksheetFunctio...
-
フランスの生年月日(jj/mm/aaaa)
-
VBでSQL文のUPDATE構文を使った...
-
VBA データ(特定値)のある最...
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
ActiveCell.FormulaR1C1の変数
-
「実行時エラー '3167' レコー...
おすすめ情報