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

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

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

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

マクロ

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

Q&A

2回答

2199閲覧

VBA リファレンスに載っていない書き方

yukitaro223

総合スコア0

VBA

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

マクロ

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

0グッド

1クリップ

投稿2020/05/09 03:42

編集2020/05/10 01:51

前提・実現したいこと

VBAリファレンスに載っていない構文(書き方)は皆さんどこでお知りになるのでしょうか。
いま下記のソースコードに記載したコードを書いています。
もとはネットからの寄せ集めで、ひとつひとつどんな構造か調べながら微修正しているような形です。

たとえば、 この部分↓

lang

1Set mySubfolder = myInbox.Folders.Item("格納用")

成り立ちを確認しようと思ってネットを調べて、

FoldersコレクションやItemメソッドについてのこれらのページ
http://outlook-navi.com/vbs/vbs56.htm
http://outlook-navi.com/vbs/vbs64.htm
を読みます。一応なるほどそう書けばいいのか、と思います。

ではリファレンスではどう書いてあるのかとリファレンスを見ると
[Itemのリファレンス]
https://docs.microsoft.com/ja-jp/office/vba/api/outlook.items.item
⇒("ファイル名")にすればいいってなぜわかるの?と疑問に思う

[Foldersコレクションのリファレンス]
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/folders-collection
⇒.Foldersという書き方はどこからきたの?と疑問に思う

いまいち解決しなくて、一応動くので、このままやり過ごしてしまうのですが。。。

リファレンスに構文として載っていないということは、オフィシャルな書き方ではないということなんでしょうか。
ベースの知識として”そう書くもの”と分かるべき部分なんでしょうか?
ご助言いただけたら幸いです。

該当のソースコード

lang

1Sub GetMail() 2 3 Dim objOutlook As Outlook.Application 4 Dim myNamespace As Outlook.Namespace 5 Dim myInbox As Object 6 Dim mySubfolder As Object 7 Dim i As Integer 8 9 Set objOutlook = New Outlook.Application 10 Set myNamespace = objOutlook.GetNamespace("MAPI") 11 Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox) 12 Set mySubfolder = myInbox.Folders.Item("格納用") 13 14 For i = 1 To mySubfolder.Items.Count 15 With ThisWorkbook.Worksheets("Sheet1") 16 .Cells(i + 1, 1).Value = mySubfolder.Items(i).SentOn 17 .Cells(i + 1, 2).Value = mySubfolder.Items(i).Subject 18 .Cells(i + 1, 3).Value = mySubfolder.Items(i).Body 19 End With 20 Next i 21 22End Sub

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

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

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

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

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

meg_

2020/05/09 06:07

・リンクは「リンクの挿入」で記入してください。 ・コードは「コードの挿入」で記入してください。
yukitaro223

2020/05/10 01:52

正しくない書き方で投稿してしまいすみません。マークダウン利用して編集しました。
guest

回答2

0

⇒.Foldersという書き方はどこからきたの?と疑問に思う

これは見るところを間違っています。Folder#Foldersプロパティです(MSDN)。

投稿2020/05/09 03:52

maisumakun

総合スコア146018

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

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

maisumakun

2020/05/09 03:53

今アクセスしているオブジェクトが、どんな「型」なのか考えてみましょう。VBAはあまりメチャクチャなことができない言語なので、それで追えるはずです。
yukitaro223

2020/05/10 04:13

回答有難う御座います。すみません、”オブジェクト 型”という言葉だとあまりそれらしきものが検索ヒットしないのですが、別のキーワードいただけませんでしょうか。
maisumakun

2020/05/10 06:21

> すみません、”オブジェクト 型”という言葉だとあまりそれらしきものが検索ヒットしないのですが ネット上を検索するのではなく、ソースコードを見て考えるべきものです。
guest

0

リファレンスはよくある使い方や、とりあえず動かせる、といったもので、それが全てではありません。

maisumakun さんのコメントのとおり、VBAで使用できるオブジェクトのほとんどはできることが決まっているため、そのオブジェクトがどのような型であるか?を特定できれば何ができるのかもおおよそわかります。

「できること」の調べ方

リファレンスを見ないとわからないこともありますが、VBAのエディタだけでもそれなりの内容は調べられます。

静的な定義の確認(「オブジェクトブラウザ」)

型がどんな機能(プロパティ・メソッドなど)を持っているのか?を定義したものとして「タイプライブラリ」というものがあります。

VBAのエディタでは、「ツール(T)>参照設定(R)…」から一覧の確認・追加ができ、「オブジェクトブラウザ」から内容を閲覧できます(よく使うタイプライブラリのほとんどはMicrosoft ~という名前です)。

「オブジェクトブラウザ」を見れば、どの型にどんな機能があるのか、といった定義を確認できます。

しかし、定義だけでは曖昧な部分があるため、そのような場合には、
VBAのエディタの機能である「ローカルウィンドウ」・「ウォッチウィンドウ」を使うと実際にどうなっているのかを確認できます。

動的な中身の確認(「ローカルウィンドウ」・「ウォッチウィンドウ」)

「ローカルウィンドウ」も「ウォッチウィンドウ」もVBAの実行中に何かしらの値を確認するためのものです。

確認する値の指定方法に違いがあり、「ローカルウィンドウ」はローカル変数を自動で表示し、「ウォッチウィンドウ」は自分で確認したいものの式を指定します。

個人的には、表示さえすれば自動で動作する「ローカルウィンドウ」の方が、使いやすいと思います。

これらを使うと、変数の値や、オブジェクトの実際の型やプロパティの確認、オブジェクトがコレクション(For Eachなどで列挙できるもの)かどうか、などが確認できます。


また、質問の一部にあるItemに関しては以下のような慣例があるため、「そういうもの」に近いです。

慣例

VBAで扱えるオブジェクトのうち、型の名前が~sと複数形のものはコレクション(For Eachなどで列挙できるもの)であり、
Countで要素数の取得、Itemに文字列(名前)か整数を渡すことでその要素の取得ができる(Itemは既定のメンバーで省略できることも多い)。

質問のソースコードでいうと以下の箇所が該当します。

あくまで慣例ですので、当てはまらないものもあります。
例えばCells(i + 1, 1)は、Excel.Range型のItemプロパティの呼び出しとなっており、型名が複数形ではありません(MS Office系であれば~Rangeは単一または複数のオブジェクトを抽象化して示す型、という傾向はありますが)。

投稿2020/05/10 09:26

imihito

総合スコア2166

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問