
VBAについて質問です。
コードを実行するとエディタ画面およびコードを書いているブックの両方の画面が真っ白になってしまいます(コードやプロジェクトウィンドウの内容も消え、ブックもデフォルトの薄い枠線が消えて全体がグレーアウトのようになります)。
こちらの解決方法をご教示頂けないでしょうか。
(今回のVBAの目的)
見積書のエクセルブックが1000個ほど入ったフォルダから、データを抽出して一つのシートに一覧作成したいです。
具体的には、
指定したフォルダ内のブック一つ一つを順番に開く→特定のセルの値をコピー→VBAコードを書いているブックにペースト→開いたブックを閉じる
というコードを書きたいです。
(作成状況)
VBA初心者のため、ネット上のコードを参考につなぎ合わせて作成しております。
説明が不足している、またわかりにくい等あるかと思いますが、追記にてわかる範囲で情報提供させて頂ければと思います。
・抽出対象のブックと同じフォルダ内にVBA実行ブックを格納しています
・標準モジュールで作成しています
・実行した際、エラー表示は出ません
↓以下、記載したコードです。
Sub test()
Const cnsTitle = "同じフォルダ内の複数ブックからデータを抽出して一覧作成"
Const cnsDIR = "\*.*"
Dim xlAPP As Application
Dim strPath As String
Dim strFilename As String
Dim GYO As Long
Set xlAPP = Application
Dim dstSheet As Worksheet
Set dstSheet = ThisWorkbook.Worksheets(1)
' フォルダの場所を指定する
strPath = ThisWorkbook.Path
MsgBox strPath
' 先頭のファイル名の取得
strFilename = Dir(strPath & cnsDIR, vbNormal)
MsgBox strPath & "\" & strFilename
' ファイルが見つからなくなるまで繰り返す
Do While strFilename <> ""
GYO = GYO + 1
' 行を加算→ここまでは構文、この下から内容を
Dim srcBook As Workbook
Set srcBook = Workbooks.Open(strPath & "\" & strFilename)
Dim srcSheet As Worksheet
Set srcSheet = srcBook.Worksheets(1)
dstSheet.Cells(GYO, 1).Value = srcSheet.Cells(10, 8)
srcBook.Close False
' 次のファイル名を取得
strFilename = Dir()
Loop
End Sub
No.3ベストアンサー
- 回答日時:
こんにちは
>vbaのブック自体が検索対象フォルダに入っているため、
>このブックもCloseの対象になっている、ということかと思うのですが
処理対象から、「コードを記載してあるブック」と「転記先のブック」は除くようにしておく必要がありそうです。(ざっと見たところ、両方は同じブックのようですが…)
そうでないと、同じフォルダの中にあるので、自分自身も対象となり、閉じられてしまうからです。
同じフォルダ内のファイルなら、ブック名で判断できるので、ループ内の最初の方で
If strFilename <> ThisWorkbook.Name Then
などとして、自分自身は処理しないようにしておけば宜しいでしょう。
ついでながら、ご質問とは関係ありませんが、
>Const cnsDIR = "\*.*"
だと、フォルダ内の全ファイルが対象となるような指定になっています。
想像するところ、現状ではエクセルファイル以外はないのでしょうけれど、仮に、他のファイルがある場合、それも処理の対象となってしまいおかしなことになりかねません。
"\*.xls" などとしておいた方が安全側ではないかと感じます。
さらに、おせっかいながらですが・・・
>見積書のエクセルブックが1000個ほど入ったフォルダから
1000個のファイルを開く/閉じるを繰り返すとそれなりの時間がかかってしまうと想像されます。
一方で、ざっと見る限り、1ブックから1セルの値だけを抜き出しているようなのと、対象が定型文書のようなので、参照するシート名は同じだろうと推測します。
ご提示のコードでは、srcBook.Worksheets(1) となっているので、同じ名のシートなのかどうかはっきりしませんが、同じシート名の場合は、Excel4Macroを利用することで開く/閉じるの時間を省略できるので、全体の処理時間を短縮できるものと思います。ご参考までに。
https://excel-ubara.com/excelvba5/EXCELVBA242.html
まさに、おっしゃる通りでした!原因はcloseの対象がvba実行用のファイルになっていたことでしたので、if文を使って解決できました!ありがとうございました。
Excel4macroについても、とても参考になります!ありがとうございました!
また、Excel4
No.2
- 回答日時:
' 次のファイル名を取得
strFilename = Dir()
は
strFilename = Dir("")
ではないか?
エラーでどこかに飛んでいるか永久ループしているか。
No.1
- 回答日時:
ご回答、大変参考になります!!ありがとうございます。
早速ループ内にDoEventsを入れてみました!
しかし、また同じように画面がグレーアウトしてしまいました。
ステップインで探ったところ、
srcBook.Close False
を実行した時に画面が消えるようです。
これは、vbaのブック自体が検索対象フォルダに入っているため、このブックもCloseの対象になっている、ということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 【マクロ】【VBA】同じフォルダ内にあるエクセルのデータを転記したい【ブック1からブック2へ】 9 2023/08/10 07:51
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
マクロ実行後、表示がおかしくなる
Excel(エクセル)
-
マクロ実行後に別シートの残像が残り、オブジェクトが見えなくなる
Visual Basic(VBA)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
エクセルVBAが途中で止まります
Visual Basic(VBA)
-
6
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
excelでVBA実行後に画面に残るゴミを無くしたい。
Excel(エクセル)
-
9
DoEvents関数って何?
Visual Basic(VBA)
-
10
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
11
Excel マクロの編集がグレーになって 編集ができなくなりました
Excel(エクセル)
-
12
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
13
UserForm1.Showでエラーになります。
工学
-
14
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
15
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
16
エクセルでENTERを押すと数式がそのまま文字列になってしまう
Excel(エクセル)
-
17
Excelマクロで、稼働中のマクロを確認する方法
その他(Microsoft Office)
-
18
エクセル UserForm 呼び出しでフリーズしてしまいます
その他(Microsoft Office)
-
19
screenupdatingが機能しなくて困ってます
Visual Basic(VBA)
-
20
どうやってもFor文を抜けてしまいます…(VBA)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
【Excel VBA】書き込み先ブック...
-
VBAで別ブックのシートを指定し...
-
VBA コードを実行すると画面が...
-
ワイルドカード「*」を使うとう...
-
vbaでvbaProjectのパスワード解...
-
VBS Bookを閉じるコード
-
【ExcelVBA】zip圧縮されたCSV...
-
Excelマクロ 該当する値の行番...
-
VBA 実行時エラー 2147024893
-
Excel2013 ウインドウサイズの固定
-
2つ目のコンボボックスが動作...
-
シートをコピーする下記記述で...
-
Dir関数で複数ブックへ行いたい...
-
VBAで別のブックにシートをコピ...
-
[Excel]ADODBでNull変換されて...
-
VBA 特定のユーザーのみパス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
VBAで別のブックにシートをコピ...
-
VBAで別ブックのシートを指定し...
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
【ExcelVBA】zip圧縮されたCSV...
-
[Excel]ADODBでNull変換されて...
-
【ExcelVBA】インデックスが有...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
vbaで他のブックに転記したい。...
-
エクセルマクロで、他ブックか...
-
vbaでvbaProjectのパスワード解...
-
VBA 実行時エラー 2147024893
-
【マクロ】違うフォルダにある...
おすすめ情報
ステップインで探ったところ、
srcBook.Close False
を実行した時に画面が消えるようです。
これは、vbaのブック自体が検索対象フォルダに入っているため、このブックもCloseの対象になっている、ということかと思うのですが
これを回避するのに良い案があれば
ぜひコメントいただきたいです!