
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
マクロ実行後、表示がおかしくなる
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
マクロ実行後に別シートの残像が残り、オブジェクトが見えなくなる
Visual Basic(VBA)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
8
excelでVBA実行後に画面に残るゴミを無くしたい。
Excel(エクセル)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
エクセルでENTERを押すと数式がそのまま文字列になってしまう
Excel(エクセル)
-
11
DoEvents関数って何?
Visual Basic(VBA)
-
12
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
13
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
14
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
15
Excelマクロで、稼働中のマクロを確認する方法
その他(Microsoft Office)
-
16
エクセルVBAが途中で止まります
Visual Basic(VBA)
-
17
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
18
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
19
Excel マクロの編集がグレーになって 編集ができなくなりました
Excel(エクセル)
-
20
VBA:小数点以下の数字を取得できる関数は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別ブックのシートを指定し...
-
エクセルVBAが途中で止まります
-
VBAで別のブックにシートをコピ...
-
新しく開いたブックをアクティ...
-
【VBA】全シートの計算式を全て...
-
Excelファイルを開くとき、読み...
-
VBSでExcelのオープン確認
-
オブジェクトは、このプロパテ...
-
フォルダ内の全てのファイルに...
-
Excel にて、 リストボックスの...
-
Excel2007VBAファイルの表示に...
-
EXCEL2013 シート内容を別ブッ...
-
Excel マクロ ファイルと同じシ...
-
エクセルVBA エクセルを開いた...
-
フォルダー内の支店ごとのブッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ブックをダイアログボックス...
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
VBA コードを実行すると画面が...
-
ワイルドカード「*」を使うとう...
-
VBAで別ブックのシートを指定し...
-
オブジェクトは、このプロパテ...
-
VBAで別のブックにシートをコピ...
-
Excelマクロ 該当する値の行番...
-
【Excel VBA】書き込み先ブック...
-
複数のエクセルファイルとシー...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ExcelVBA】インデックスが有...
-
VBA シート名が一致した場合の...
-
2つ目のコンボボックスが動作...
-
Excel マクロ ファイルと同じシ...
-
【VBA】全シートの計算式を全て...
-
[Excel]ADODBでNull変換されて...
-
Excel2007VBAファイルの表示に...
おすすめ情報
ステップインで探ったところ、
srcBook.Close False
を実行した時に画面が消えるようです。
これは、vbaのブック自体が検索対象フォルダに入っているため、このブックもCloseの対象になっている、ということかと思うのですが
これを回避するのに良い案があれば
ぜひコメントいただきたいです!