- ベストアンサー
Folderオブジェクトでsubfoldersプロパティが使えない
Excel2000のVBAで、ユーザーがダイアログで選択したフォルダのサブフォルダのコレクションを取得しようとしています。 次のようなコード1にしたら、oFolderオブジェクトでは「Subfoldersプロパティをサポートしていない」旨のエラーが出ます。そこで、もう一段関数をかませて、その関数中でSet oFileSys = CreateObject("Scripting.FileSystemObject") Set folder1 = oFileSys.GetFolder(folder_name)のようにして、別途folderオブジェクトを作成し、コード1の「colFolder」へ返すようにしてみたところ、うまく動きました。下記コード1中の「oFolder」と上の関数内の「folder1」は、いずれもFolderオブジェクトなのに、プロパティの種類が違うのはなぜでしょうか? ちなみに、オブジェクトブラウザで調べると、Folderクラスには、subfoldersプロパティというのが確かにありません!が、VBのヘルプにはしっかりとFolderオブジェクトの中にSubfoldersプロパティが載っています。 <コード1> Function フォルダ選択(メッセージ As String) As Object Dim oShell As Object,oFolder As folder,colFolder As Object Set oShell = CreateObject("Shell.Application") Set oFolder = oShell.BrowseForFolder(0, メッセージ, 1, "S:\") If Not (oFolder Is Nothing) Then Set colFolder = oFolder.subfolders Set フォルダ選択=colFolder Else MsgBox "フォルダを選択しないと継続できません。" End;End If;END SUB
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
お礼
いろいろと貴重なヒントをありがとうございました。VBAのヘルプで、以下のようなものも見つけました。ヘルプは探したつもりでも、見えていないことがあるものですね。 <タイプ ライブラリへの参照設定> オートメーション (以前の OLE オートメーション) によって、別のアプリケーションにあるオブジェクトを Visual Basic コードの中から使用できます。別のアプリケーションで使用されるオブジェクトを提供するアプリケーションにも、タイプ ライブラリにあるオブジェクトに関する情報を提供しています。別のアプリケーションのオブジェクトを最大限に活用するには、そのアプリケーションのタイプ ライブラリへの参照を設定する必要があります。 ~(中略)~ 別のアプリケーションにあるオブジェクトを操作するコードを記述している場合、そのオブジェクトへのアクセスを最適なものにするため、そのアプリケーションのタイプ ライブラリへの参照を設定することをお勧めします。別のアプリケーションのオブジェクトを使用するのに、参照を設定することは必ずしも必要ではありませんが、(中略) 別のアプリケーションのオブジェクトを使用する前に、そのアプリケーションのタイプ ライブラリへの参照を設定しておくと、コードの実行速度が向上します。参照を設定すると、別のアプリケーションにあるオブジェクトを表すオブジェクト変数を最適な型で宣言できます。たとえば、Microsoft Excel オブジェクトを使用するコードを記述している場合、Microsoft Excel タイプ ライブラリへの参照を設定しているときは、Excel.Application 型のオブジェクト変数を宣言できます。Microsoft Excel Application オブジェクトを表す変数を作成する最も実行が速いコードを次に示します。 Dim appXL As Excel.Application Microsoft Excel タイプ ライブラリへの参照を設定していない場合は、オブジェクト型 (Object) の総称変数として変数を定義する必要があります。次のコードは、実行速度が遅くなります。 Dim appXL As Object (中略) オートメーション サーバーとしても機能する Microsoft アプリケーションでは、そのアプリケーションのタイプ ライブラリへの参照を別のアプリケーションで設定でき、そのオブジェクトを制御できます。