EXCEL2002です。(セキュリティは低です)
いままで、問題なく実行できてたんですが、このような現象は始めてです。
他のマクロは問題なく、実行できておりますが、このマクロだけがおかしいんです。
問題内容の経緯
1、 最初の 1回 の実行時、下記の線で挟まれた部分だけが、エラーで反転された。
2、 次に、VBの画面だけを閉じて、再度実行しましたら、今度はエラーにならずに、その後は何度実行しても、「 じりじり音 」 がしてしまうだけで、休止してるような状態です。(フリーズはしません)
3、 休止して動かないが、マウスは動きますので、EXCELを閉じますと、
「 このプログラムに応答はありません 」 の画面表示されますので、「 すぐに終了 」 ボタンで、終了した。
4、 PCを再起動して、何度再実行しましたが、エラーにはならずに「2~3」の繰り返しで、全く変わらない状態です。
自身で気が付くことは、最近、マイドキュメントに、PDFファイル等を100Mぐらい、保存したぐらいですが。
他には、フリーソフト等を試しにインストールし使用しました。
以上 よろしくお願い致します。
For i = 1 To .FoundFiles.Count
'見つかった 「 *.csvファイル 」 を一つずつ開く
-----------------------
Workbooks.OpenText Filename:=.FoundFiles(i), _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Comma:=True
------------------------
'ああ.xlsブックに移動
Sheets(1).Move after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count)
Next i
No.3ベストアンサー
- 回答日時:
こんにちは。
Wendy02です。最初に、
>翌日、ソフト2つが起動してる状態で、実行しましたら、エラーになる。
私が書いたのは、FileSearch が、Dependency がおかしくなっているのでは?ということです。FileSearch は、もともと外部ツールなので、何かが、占有していたら、ダメになるのではないか、と考えたのです。ただし、コードを見る限りは、そんな必要はなさそうです。
それで、基本的なことですが、あまり、FileSearch のプロパティを省略した書き方はしないほうがよいですね。本当にわかっていればよいのですが、時々、回答者で、ヘンなことを教える方がいます。
>1、 「*.csv」 を一端、開かないと、データを書き込むことはできないものなんですか?
できますが、逆に、面倒です。Input ステートメントで、テキストラインをSplit関数で分割し、配列にして、それぞれのシートに貼り付けます。
ためしに、元のコードを元にして、こちらでコードを作ってみました。
コピー先ブックが開いていない場合は、ブックが開きます。コピー先ブックが見つからなければ、ブックを作ります。
このコードで調べてみてください。
Sub testCSVImport()
Dim strLookIn As String
Dim wb As Workbook
Dim Files As Variant
Dim fn As Variant
Dim i As Integer
Dim j As Integer
'コピー先ブックの設定
Const DSTINBOOK As String = "ああ.xls"
'ファイルの検索場所
strLookIn = ThisWorkbook.Path
On Error GoTo ErrHandler
Set wb = Workbooks(DSTINBOOK) 'ブックがあるかチェックする
For j = wb.Sheets.Count To 2 Step -1
Application.DisplayAlerts = False
wb.Sheets(j).Delete
Application.DisplayAlerts = True
Next j
wb.Sheets(1).Name = "FirstSheet" '最初のシート
'FileSearchによる csv ファイルの検索
With Application.FileSearch
.NewSearch '必ず入力する
.Filename = "*.csv"
.LookIn = strLookIn
.SearchSubFolders = False
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
If .Execute > 0 Then
Set Files = .FoundFiles
Else
MsgBox "検索条件を満たすファイルはありません。"
Exit Sub
End If
End With
'シートのコピー
i = 1 'iの初期値
Application.ScreenUpdating = False
For Each fn In Files
With Workbooks.Open(Filename:=fn)
.ActiveSheet.Copy After:=wb.Worksheets(i)
.Close False
End With
i = i + 1
Next fn
'最初のシートを削除(残しておいても良いかと思います)
Application.DisplayAlerts = False
wb.Worksheets("FirstSheet").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
''wb.Save '保存が必要な場合
Set wb = Nothing
Exit Sub
ErrHandler:
'エラー時に、コピー先ブックを開く
If Err.Number = 9 Then
If Dir(DSTINBOOK) = "" Then
Set wb = Workbooks.Add
wb.SaveAs DSTINBOOK
Resume Next
Else
Set wb = Workbooks.Open(DSTINBOOK)
Resume Next
End If
Else
MsgBox Err.Number & " :" & Err.Description
Exit Sub
End If
End Sub
No.2
- 回答日時:
こんにちは。
まず、どこまでコードが通っているか、調べてみてください。ブレイク・ポイントを置けば分かるはずです。
全体が書かれていないのではっきりしない部分がありますが、FileSearch オブジェクトは、NewSearch コマンドは入っていますか?
私としては、以下のどこに問題があるか、それだははっきりしたいと思います。
For i = 1 To .FoundFiles.Count
Workbooks.OpenText Filename:=.FoundFiles(i), _
ちゃんと、.FoundFiles.Count の数は取れていますか?
ここの .FoundFiles(i) ファイル名はちゃんと取れているか、調べてみてください。
記録マクロからのようですが、
TextQualifier:=xlDoubleQuote, _
の行を削除してみるか、
または、正しい書き方に戻してみるとか。
TextQualifier:= xlTextQualifierDoubleQuote
ただ、もしも、トラブルがコードの中にないようでしたら、最終的には、このコード自体を、あきらめたほうがよいです。もともと、TextOpenメソッドは、CSVの特殊なものに使う書き方ですから、コードを見ている限り、特殊な部分はないように思います。
それから、そのコード自体は、外部ツールを使っているので、そのツール自体の依存性(Dependency)が壊れていると、そのままの状態では、容易には修復は難しいかもしれません。いろんなソフトを入れていますと、しょうがないのです。別に特別にOSとかOffice が壊れたようなことではなくて、VBAを専門に扱う人は、私を含めて、みんな、一度は経験する話のようです。だから、この手の質問の回答では、手抜き(=初級のコード)をしなければ、別のコードを書くのですね。
この回答への補足
こんにちは、お世話になります。
実行できてた当事の実行結果は、自身の判断では、全く問題ないと思います。
その後の経緯
1、 デスクトップ上の他のソフト、IE、を全て終了してから実行したが、変わらず。
その後、少し時間を置いてから実行しましたら、実行できました。
2、 翌日、ソフト2つが起動してる状態で、実行しましたら、エラーになる。
「エラー番号1004、*.csvがありません。ファイル名及びファイルの保存場所が正しいかどうか確認してください。」
デバッグで、当初質問と同じ 「 線で挟まれた6行だけ 」 が反転されました。
3、 閉じて、再度、実行しましたが、2、と同じでした。
4、 そこで、2、と同じ環境で、試しに、当コードの*.CSV → *.csv にして、実行しましたら、実行できました。
下記が全コードです。
1、 「*.csv」 を一端、開かないと、データを書き込むことはできないものなんですか?
ご確認の上、おかしな箇所がありましたら、ご教示願います。
----
Private Sub TEST()
Dim myFS As FileSearch
Dim mySvWb As Workbook
Dim i As Long
ChDir "C:\DATA"
Set myFS = Application.FileSearch
With myFS
.LookIn = "C:\\Documents and Settings\Owner\デスクトップ\ファイルフォルダ"
.SearchSubFolders = True 'サブフォルダも参照する
.Filename = "*.CSV" '→*.csvにしましたら実行できました
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
'-----------------------------------------------
'見つかったファイルを一つずつ開く
Workbooks.OpenText Filename:=.FoundFiles(i), _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Comma:=True
'-----------------------------------------------
'ああ.xlsブックに移動
Sheets(1).Move after:=Workbooks("ああ.xls").Worksheets(Workbooks("ああ.xls").Sheets.Count)
Next i
'初期設定のシートを削除
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Else
'検索結果が0なら
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
End Sub
No.1
- 回答日時:
Sub test01()
With Application.FileSearch
.LookIn = "C:\Documents and Settings\XXXX\My Documents"
' .FileType = msoFileTypeExcelWorkbooks
.FileType = msoFileTypeAllFiles
.Filename = "*.csv"
.Execute
End With
Dim i As Integer
With Application.FileSearch
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Workbooks.OpenText Filename:=.FoundFiles(i), _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Comma:=True
'----
n = Workbooks("CSV集約.xls").Sheets.Count
MsgBox n
ActiveWorkbook.Sheets(1).Move after:=Workbooks("CSV集約.xls").Worksheets(n)
Next i
End With
End Sub
を標準モジュールに貼り付ける。
フォルダーの部分を自分のケースに合わせる。
CSV集約.xlsで保存。
再度CSV集約.xlsを読み込んで、実行。
私の場合はうまく行ったようですが、うまくいくでしょうか。
うまくいった場合は、質問のコードと比べて検討してみてください。
ーー
うまくいかない場合は、回答が不適切だと思うので、本件は無視してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/04 14:20
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/04 12:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAが途中で止まります
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBAで別ブックのシートを指定し...
-
ワイルドカード「*」を使うとう...
-
VBS Bookを閉じるコード
-
VBAで複数のブックを開かずに処...
-
エクセルのマクロについて教え...
-
VBA コードを実行すると画面が...
-
ADOで複数のBookから抽出
-
ExcelVBA:すでに開かれている...
-
複数のエクセルブックをひとつ...
-
VBA 実行時エラー 2147024893
-
ExcelのVBAです。フォルダ内の...
-
Excelファイルを開くとき、読み...
-
Excelブックがアクティブになっ...
-
vbaで他のブックに転記したい。...
-
【ExcelVBA】zip圧縮されたCSV...
-
エクセルのマクロについて教え...
-
Excelマクロ 該当する値の行番...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】VBA実行でダイアロ...
-
ExcelのVBAです。フォルダ内の...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
VBA 別ブックからコピペしたい...
-
VBAで別ブックのシートを指定し...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】zip圧縮されたCSV...
-
複数のエクセルブックをひとつ...
-
VBSでExcelのオープン確認
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
おすすめ情報