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

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

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

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

Q&A

解決済

3回答

5917閲覧

vba ファイルを開かずに参照

yakumo02

総合スコア103

VBA

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

0グッド

0クリップ

投稿2020/08/07 06:19

編集2020/08/07 07:33

分かりやすいように書き換えていましたが、本来のコードで質問させていただきます
sampleでFileSearchを引数つきで呼び出します
一番下のFor Each Folder In FSO.GetFolder(path).SubFoldersの記述でサブフォルダを再帰を使い全て取得していきます。

Do While book <> ""で、サブフォルダに指定したファイル(book)がある場合、そのファイルを開かずに何らかの処理をしたいと思っています

以下だとオブジェクトは、このプロパティまたはメソッドをサポートしていません。と表示されてしまいます。

Sub sample() Call FileSearch("C:\Users\kimura\Documents\Document\テスト) End Sub Sub FileSearch(path As String) Dim FSO As Object, Folder As Variant, File As Variant, buf As String Set FSO = CreateObject("Scripting.FileSystemObject") book = Dir(path & "*テスト.xls*") Do While book <> "" Thisworkbook.Worksheets("イベント").Range("A33").Value = ExecuteExcel4Macro("'" & path & "[" & buf & "]テスト2シート'!R1C1") buf = Dir() Loop For Each Folder In FSO.GetFolder(path).SubFolders Call FileSearch(Folder.path) Next Folder End Sub

参照サイト
https://excel-ubara.com/excelvba5/EXCELVBA242.html
https://binary-star.net/excel-vba-excel4-dellsdataread

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

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

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

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

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

kaputaros

2020/08/07 07:00

*を伏字にするのなら、別の仮の名前をつけてしまった方がいいですよ。
yakumo02

2020/08/07 07:01

ご指摘ありがとうございます。
hatena19

2020/08/07 08:46

「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」というエラーはどの行ででてますか。
guest

回答3

0

ベストアンサー

なんかもう、滅茶苦茶なコードですね。
いろいろなサイトのコードを意味も理解せずに適当につなげたようなコードで支離滅裂です。
一つずつ指摘していったらキリがないので、

とりあえず、C:\Users\ユーザー名\Documents\Document\ フォルダーにあるエクセルファイル(ファイル名に「テスト」を含むもの)の テスト2シート の R3C2(B3セル)の値をメッセージボックスに表示する場合は下記になります。

vba

1Sub FileSearch() 2 Const path = "C:\Users\ユーザー名\Documents\Document\" 3 Dim buf As String, ca 4 5 buf = Dir(path & "*.xls*") 6 7 Do While buf <> "" 8 '開かずに処理 9 ca = ExecuteExcel4Macro("'" & path & "[" & buf & "]Sheet1'!R2C3") 10 Debug.Print ca 11 buf = Dir() 12 Loop 13 14End Sub

投稿2020/08/07 06:47

編集2020/08/07 08:40
hatena19

総合スコア34075

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

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

yakumo02

2020/08/07 07:01

すみません、修正しました
hatena19

2020/08/07 08:38

book = Dir(path & "*テスト.xls*") Do While book <> "" は buf = Dir(path & "*テスト.xls*") Do While buf <> "" ですね。
hatena19

2020/08/07 08:45

Call FileSearch("C:\Users\kimura\Documents\Document\テスト) は、 Call FileSearch("C:\Users\kimura\Documents\Document\テスト") ですね。 あと、「テスト」というフォルダーは、C:\Users\kimura\Documents\Document\内にあるのでしょうか。 また、結果をすべてA33セルに上書きしてますが、それでいいのでしょうか。
yakumo02

2020/08/07 14:23

ありがとうございました! 何とか解決しました
guest

0

Do While buf <> ""

のbufってなんだろう・・。

投稿2020/08/07 06:31

編集2020/08/07 06:36
mako1972

総合スコア383

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

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

yakumo02

2020/08/07 06:38

すみません、修正しました。 bookでございます
mako1972

2020/08/07 06:43

こういうパスってあるんですか・・。 path = "C:\Users**\Documents\Document*"
kaputaros

2020/08/07 06:51

ワイルドカードにしたいんですね、きっと。
yakumo02

2020/08/07 06:56

すみません、修正しました ワイルドカードではなく、伏字にしてあります。紛らわしく申し訳ありません
guest

0

pathが文字列として扱われてしまっているのでは?

ca = ExecuteExcel4Macro("'" & path & "[*テスト.xls*]テスト2シート'!R3C2")

投稿2020/08/07 06:29

kaputaros

総合スコア1844

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

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

kaputaros

2020/08/07 06:50

あと、subプロシージャの引数path、いきなり上書きしてて意味ないですよ。
yakumo02

2020/08/07 06:56

すみません、修正しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問