アプリ版:「スタンプのみでお礼する」機能のリリースについて

当方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)の部分でエラーになります。

「型が一致しません。」のエラーになります。


 多分初歩的な間違いをしてるのだと思いますが,アドバイスお願いできればと思います。

A 回答 (2件)

こんばんは、


なぜうまくいっている処理があるのに変えるのかわかりませんが、、

ご質問に対して、、
変数 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は一致しない場合があります。
    • good
    • 0
この回答へのお礼

遅くなりました。適切なアドバイスありがとうございます。ベストアンサーにさせていただきます。

お礼日時:2020/11/10 23:55

#1です。

訂正します。
Session.AccountsとDisplayNameは一致しない場合があります。間違い。

頓珍漢な事を書いてしまいました。
書きたかった事は、アカウント名とデータファイルフォルダー名と同じでない場合がありますので、その場合、取得できないないので
objNamespace.FoldersでループしてNamespaceTopFolderを探し出す必要があるかもしれません。
    • good
    • 0
この回答へのお礼

適切なアドバイスありがとうございます。

今まで,無からは学習できないので,先達のマクロ等を参考に,

その一部分を自分なりに書き換え,動作するマクロ(プログラム)を

集めて,自分なりのものを作っていました。

今回も,動作するマクロをご提示いただいたのですが,

自分なりのものをということで,あれこれやりました。


別なマクロに,

既定以外のホルダーにアクセスするのに,

 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才になろうとしているおじいちゃんの私に,どれだけ

できるかななんて,考えています。(笑)

ありがとうございました。

お礼日時:2020/11/04 22:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!