Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Microsoft 365)
Workbooks.Openにつきまして
投稿日時: 23/01/02 17:16:02
投稿者: puyo

お世話になります。
 
ふと疑問に思ったことですが、For Eachでフォルダ内のブックを開く処理を
書いていた時に、なぜWorkbooks.Openで開けるのかと思いました。
 
Sub sample()
 
Dim fso As Object
Set fso = CreateObject("scripting.filesystemobject")
Dim files As Object
Dim f As Object
 
For Each f In fso.getfolder("フォルダパス").files
    Workbooks.Open f
Next
 
End Sub
 
WorkbooksのOpenメソッドについて、オブジェクトブラウザ上では

引用:
Function Open(Filename As String, [UpdateLinks], [ReadOnly], 〜長いので略〜) As Workbook

とあるようにString型のファイル名を指定しろとあるのに、
ループで取得したObject型のfを開けるのはなぜかと思いました。
ご存じの方がいらっしゃればご教示いただきたく、お願い致します。

回答
投稿日時: 23/01/02 17:56:24
投稿者: 半平太

「f」はFileオブジェクトです。なので、確かにそんなもの受け取っても普通はOpenできないです。
(OpenメソッドがFileオブジェクトも受け取れる仕様になっていれば、解釈もまた違ってきます)
 
しかし、そこですぐエラーにさせず、既定のプロパティがないか検討されます。
幸いにも、Pathプロパティが既定のプロパティとして定義されていたのでしょうね。
 
Debug.Print f 
とやってみると、ファイルのPathが表示されますので、それが確認できます。
※ RangeオブジェクトのValueプロパティみたいなものと思ってください。
 
まあ、こう書けば間違いないです。
        ↓
Workbooks.Open f.Path

回答
投稿日時: 23/01/02 18:06:10
投稿者: simple

FileSystemObjectのFileクラスについては、
既定のプロパティ(デフォルトプロパティ)がPathと定められています。(下記 *参照)
つまり、

  Workbooks.Open f
と書くと、それは
  Workbooks.Open f.Path
と書くのと同等ということです。
これで納得できますか?
 
(*)
Microsoft Scripting Runtimeを参照設定して、
F2キーを押してオブジェクトブラウザーを表示してみてください。
Fileの持つプロパティを見ると、Pathだけアイコンが特別なものになっているはずです。
これは既定のプロパティであることを示すアイコンです。
 
# 完全に重なりましたが、折角なので投稿しておきます。

投稿日時: 23/01/02 22:22:35
投稿者: puyo

半平太様、simple様
 
コメントありがとうございました。
 
デフォルトプロパティがPathだからという説明、納得致しました。
確かにFileのデフォルトプロパティを確認したところ、Pathになっていました。
 
なぜこの記述で動くのかが理屈でわかると面白いですね。
 
解決済みとさせて頂きます。