VBAについての質問です。
マクロが保存されているエクセルと同じフォルダにあるエクセルファイルを全て開くマクロをつくりたくて、以下のようにしました。
Dim filename As String
Dim openedbook As Workbook
Dim isbookopen As Boolean
filename = Dir(ThisWorkbook.Path & "*.xls")
Do While filename <> ""
If filename <> ThisWorkbook.Name Then
isbookopen = False
For Each openedbook In Workbooks
If openedbook.Name = filename Then
isbookopen = True
Exit For
End If
Next
If isbookopen = False Then
Workbooks.Open (filename)
End If
End If
filename = Dir()
Loop
エラーはでないのですが、ファイルは1つも開きません。何がだめなのかを教えていただきたいです。
よろしくお願いします。
No.6ベストアンサー
- 回答日時:
こんにちは
ファイルパスの「\」その他に関しては、既に指摘の出ている通りですね。
一方で、開いているブックとのチェックを
>For Each openedbook In Workbooks
で行っていますが、毎回ループでチェックしなければならないのと、ブックを開くごとにチェック対象が増えてゆく(実際は、新しく開いたブックのチェックは不要)という欠点があります。(別に、間違った処理にはなりませんけれど)
さらには、このチェックは、
>If filename <> ThisWorkbook.Name Then
とも重複していることになります。
(Workbooksには、ThisWorkbookも含まれているので)
最初にDictionaryオブジェクト等に、既オープンのブックをリスト化するなどしておくことで、チェックを単純にできるものと考えられます。
また、ロジックを単純化できると、IFのネストやループのネストも減るので、視認性もよくなると思われます。
以下、ご参考までに。
Sub Sample_12047309()
Dim fList, f
Dim folderPath As String, fileName As String
folderPath = ThisWorkbook.Path & "\"
Set fList = CreateObject("Scripting.Dictionary")
For Each f In Workbooks
fList.Add f.Name, ""
Next f
fileName = Dir(folderPath & "*.xls")
While fileName <> ""
If Not fList.Exists(fileName) Then _
Workbooks.Open (folderPath & fileName)
fileName = Dir()
Wend
End Sub
No.5
- 回答日時:
とりあえず、修正しておきました。
動作確認済みです。
Public Sub sample()
Dim filename As String
Dim openedbook As Workbook
Dim isbookopen As Boolean
filename = Dir(ThisWorkbook.Path & "\*.xls")
Do While filename <> ""
If filename <> ThisWorkbook.Name Then
isbookopen = False
For Each openedbook In Workbooks
If openedbook.Name = filename Then
isbookopen = True
Exit For
End If
Next
If isbookopen = False Then
Workbooks.Open (ThisWorkbook.Path & "\" & filename)
End If
End If
filename = Dir()
Loop
End Sub
ありがとうございます!
最初に私が訂正してたのは不十分だった用で、書いていただいた通りに訂正したら無事にできました
御丁寧にありがとうございました!
No.4
- 回答日時:
>filename = Dir(ThisWorkbook.Path & "*.xls")
これについては 他の方の指摘どり \ が無い
しかし この一行は ループの外にあり
”全て開く” 事は出来ないよな
基本的な事をまったく理解されていないように思われます
Dir関数をなかなか理解できずにうなっていたのを見透かされましたね笑
より正確に思ったものを作れるようになるためにご指摘の通り基本を学び直したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
同一フォルダ内のファイルを開く
Excel(エクセル)
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
-
4
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
5
ExcelVBAでカレントディレクトリのファイルを開く方法は?
Excel(エクセル)
-
6
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
7
同一フォルダ内の別ブックからシートをコピーするには? 「集計」フォルダ内に「項目別集計.xlms」と
Visual Basic(VBA)
-
8
EXCELでワークシートを開いたらマクロを自動実行したい
Excel(エクセル)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
EXcelマクロで同じフォルダ内のファイル全て開く。ドライブまたいでも対応
Android
-
11
EXcelのマクロで相対パスでファイルを開く
その他(Microsoft Office)
-
12
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
13
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
14
VBAでセル値からフォルダ名を取得するコードについて
Excel(エクセル)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
private subモジュールを他のモジュールから呼び出して使う方法を教えてください(-.-)
Visual Basic(VBA)
-
17
Vba初心者です。下記のコード助けてください Loopに対するDoがありませんと表示されます Sub
オープンソース
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】写真の縦横比を変えずに...
-
常に「すべての列のサイズを自...
-
ファイル並び順がバラバラで困...
-
検索したファイルの場所を調べ...
-
System32内のファイルを書き換...
-
シャットダウン時に自動ファイ...
-
ネットワーク経由の共有ファイ...
-
タスクスケジューラで指定フォ...
-
ショートカットファイルそのも...
-
レジストリの変更が保存されない
-
ワードの作成日時と更新日時
-
VB.net 任意の例外を発生させ...
-
VBAで、㉑という数値が、正しく...
-
貼り付けとショートカットの貼...
-
Not kind:Folders
-
フォルダが「読み取専用」にな...
-
WINDOWS10でUTF-8-macのファイ...
-
フォルダのプロパティでセキュ...
-
条件付き書式が設定できない
-
エクセルでオプションが変更で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】写真の縦横比を変えずに...
-
VBAで同一フォルダにあるブック...
-
エクセルの数式で教えてください。
-
パイソンでエクセルマクロを動...
-
常に「すべての列のサイズを自...
-
System32内のファイルを書き換...
-
ファイル並び順がバラバラで困...
-
タスクスケジューラで指定フォ...
-
検索したファイルの場所を調べ...
-
ショートカットファイルそのも...
-
レジストリの変更が保存されない
-
エクスプローラの検索で期間と...
-
シャットダウン時に自動ファイ...
-
Not kind:Folders
-
VB.net 任意の例外を発生させ...
-
USBにコピーして車で聴くには?
-
Googleドライブで削除できない...
-
Cドライブにconfig msiというフ...
-
貼り付けとショートカットの貼...
-
google Drive 容量を減らせない...
おすすめ情報
Doの行からとばされました
そのように変更しても変わらずです泣