• ベストアンサー

マクロを実行すると、エラーにならずに、じりじり音がしてしまう

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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

oshietecho-dai
質問者

お礼

誠に有難うございました。 コードについても併せてお礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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を専門に扱う人は、私を含めて、みんな、一度は経験する話のようです。だから、この手の質問の回答では、手抜き(=初級のコード)をしなければ、別のコードを書くのですね。

oshietecho-dai
質問者

補足

こんにちは、お世話になります。 実行できてた当事の実行結果は、自身の判断では、全く問題ないと思います。 その後の経緯 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

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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を読み込んで、実行。 私の場合はうまく行ったようですが、うまくいくでしょうか。 うまくいった場合は、質問のコードと比べて検討してみてください。 ーー うまくいかない場合は、回答が不適切だと思うので、本件は無視してください。

oshietecho-dai
質問者

お礼

ご回答誠に有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ワイルドカードの記述が、原因でしょうか?

    下記コードが、ついこの前までは、きちんと "A?07??????.CSV" を読み込んでたんですが、 今は、 "検索条件を満たすファイルはありません。"  となってしまいます。 1、ワイルドカードの記述が、おかしいでしょうか? 2、フォルダ名は、漢字等はやめて、半角英数字にしたほうがよいのでしょうか? 3、このような、現象は、よくあることでしょうか? 以上 原因がわかりませんので、何卒ご教示くださいませ。 ----------------- Private Sub TEST() Dim myFS As FileSearch Dim i As Long ChDir "C:\Documents and Settings\Owner\デスクトップ\ああ" Set myFS = Application.FileSearch With myFS .LookIn = "C:\Documents and Settings\Owner\デスクトップ\ああ" .Filename = "A?07??????.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 Else MsgBox "検索条件を満たすファイルはありません。" End If End With End Sub

  • オブジェクト変数の取得について

    以下のようにOpenTextでファイルを開いてそれをオブジェクト変数に取得したいのですが 「Functionまたは変数が必要です」というエラーになります。 どなたかご教示ねがえませんでしょうか? よろしくお願いいたします。 Set WorkBookObject =Workbooks.OpenText FileName:=strPath & strTxt, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, FieldInfo:=aryCell

  • エクセル VBA

    エクセルで指定したフォルダから シート1のA1セルに記入された名前のテキストファイルを 開くマクロを作りました 変数filepassがセルA1に記入されたファイルのパスのとして Workbooks.OpenText filename:=filepass, StartRow:=1 _ , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(1, 1) しかし このままだと指定したフォルダ(filepass)にファイルがなかったとき エラーになります もしファイルがなかったときに 何かメッセージを表示させたいのですが どのようにすればよいのでしょうか どなたか 教えてください VBAは素人です よろしくお願いします

  • エクセル2000マクロエラーについて

    下記のマクロをエクセル95で動かすと正常に終わるのですが、エクセル2000で 動かすとデバッグエラーで止まります。 何処がおかしいのでしょうか教えてください。 出来れば言語の意味も教えてください。 Sub 送信メニュ() Dim i, C_COUNT, folda, work, tuki i = MsgBox("加工業者別の発注基礎資料を作成します。", 1, "着色加工計画作成システム") If i <> 1 Then Exit Sub Sheets("msg2").Select Call gafalse folda = "C:\aa着色加工計画\" tuki = Sheets("ACT").Cells(5, 12).Text→最初にここでデバッグエラーになります。 tuki = Val(Right(tuki, 2)) If tuki = 12 Then tuki = 1 Else tuki = tuki + 1 End If tuki = Format(Str(tuki), "00") Workbooks.Add F_NAME = "加計" + tuki + "月.XLS" ActiveWorkbook.SaveAs Filename:=folda + F_NAME, _ FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Windows("加工品.xls").Activate Sheets("masta").Select C_COUNT = Sheets("masta").Cells(2, 3).Text For count = 1 To C_COUNT 'C_COUNT Windows("加工品.xls").Activate Sheets("masta").Select Cells(3, 5) = count i = count M_KAKOBA(count) = "sheet" + i Call 送信 Next count Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:=folda + F_NAME, _ FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ActiveWindow.Close End Sub

  • コンボボックスからファイルを指定して、マクロを実行するには?

    EXEL VBAで、コンボボックスから2週分のファイルを選び、そのファイルの差を算出するマクロを組みたいのですが、どうしてもコンボボックスで選んだファイルを変数に変えてマクロを実行することが出来ません。どうしたらよいのでしょうか? (現在作成中のマクロを下記に貼り付けました) Private Sub UserForm_Initialize() With Application.FileSearch '検索先フォルダを指定する .LookIn = "F:\Sample2008\数字ファイル(test)" '検索するファイル名を指定する .Filename = "*.xls" '検索を実行する If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Workbooks("変更分.xls").Worksheets("変更数字確認シート").Cells(i, 151).Value = .FoundFiles(i) Next i Else MsgBox "ファイルが見つかりません" End If End With With UserForm1 'リストの項目にセルを指定する .ListBox5.RowSource = Workbooks("変更分.xls").Worksheets("変更数字確認シート").Range("EU1:EU30").Address 'リストの項目にセルを指定する .ListBox6.RowSource = Workbooks("変更分.xls").Worksheets("変更数字確認シート").Range("EU1:EU30").Address End With End Sub Sub ListBox5_Click() ListBox5.ListIndex = 先週分 End Sub Sub ListBox6_Click() ListBox6.ListIndex = 今週分 End Sub '別マクロにて「先週分」と「今週分」の変数を使って引き算を実行

  • エクセル2000マクロインデックスエラー

    下記のマクロでインデックスが有効範囲にありません。 Windows(F_NAME).Activate→エラー個所 Sheets(M_KAKOBA(count)).Select→エラー個所 教えてください。 Dim work, hensu, i, j, h Windows("加工品.xls").Activate work = Sheets("masta").Cells(3, 6).Text 'シート名の変更 Windows(F_NAME).Activate Sheets(M_KAKOBA(count)).Select ActiveSheet.Name = work

  • VBマクロについて

    VBマクロについて 0864_001.xls 0864_002.xls … 0864_009.xls というxlsファイルがあります。 0864_001.xlsを開く→処理→閉じる→0864_002.xls→… のようなループを考え、matome.xls内で以下のようなマクロを作成したのですが実行されません。 Sub Test() Dim i As Integer For i = 1 To 9 Workbooks.Open ThisWorkbook.Path & "\0864_00" & CStr(i) & ".xls" Workbooks("\0864_00" & CStr(i) & ".xls").Activate Range("F1").Formula = "=max($B$11:$B$17)" Range("G1").Formula = "=max($B$391:$B$398)" Range("F1:G1").Copy Workbooks("matome.xls").Activate Sheet1.Activate Range("A" & CStr(i + 1)).PasteSpecial Paste:=xlPasteValues Workbooks("\0864_00" & CStr(i) & ".xls").Close SaveChanges:=False Next i End Sub 5行目でエラーが発生し、「インデックスが有効範囲にありません」とのメッセージが表示されます。 どのようにすれば実行されるのか教えていただきたいです。

  • エクセルマクロ ファイル名を変更したとき

    マクロ初心者です。 データファイルからシートを複写挿入するマクロです。 コピー先ファイル名を都度変更したいのですが、その場合マクロにコピー先ファイル名が入っているのでエラーになります。名前が変わっても実行できるようにするにはどうしたらよいのでしょう? なお、複写元のデータファイルは複写後に閉じます。 Workbooks.Open Filename:="データファイル.xls" Sheets("Sheet1").Copy Before:=Workbooks("コピー先ファイル名.xls").Sheets(1)

  • エクセル2000のマクロについて再び

    新しいブックを作りさらに他のブックで作成されているシートをコピーして移動するというマクロを作ります。この時、新しく作ったブックの名前がBook1にならないとその時点でマクロのエラーになりなってしまいますが、たまにBook2になってしまうときがあります。必ずBook1になると指定することはできないのでしょうか。 Sheets(Array("sheet1", "sheet2", "sheet3")).Select Sheets(Array("sheet1", "sheet2", "sheet3")).Copy →新しいシートを作成 Workbooks.Open Filename:="C:xxx\○○\△△.xls" Sheets.Copy after:=Workbooks("book1").Sheets(2) →ここで、Book1が存在しないとエラーになってしまう。 お願いします。

  • EXCELマクロ実行後、読み込み専用になってしまう

    EXCELマクロ実行後に読み取り専用になってしまう。 <内容>  1つのファイル(A)に他の複数のファイル(B,C・・・)内のシートを取り込んだ後、更新せずに終了させています。 <困ったこと>  そのマクロを実行したあと上記のファイルB,C・・・が読み取り専用になってしまいます。PCを再起動すると解除されます。  読み取り専用にならないようにする方法はありますでしょうか。  ご指導のほど、よろしくお願いいたします。 <参考> For Each fName In FSO.GetFolder(MyFolder).Files If FSO.GetExtensionName(fName) = "xls" And _  FSO.GetBaseName(fName) <> "ファイルA" Then  Set wBook = Workbooks.Open(fName)   For 番号 = 1 To Worksheets.Count  wBook.Worksheets(番号).Copy _  after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)   Next 番号    wBook.Close True   End If Next

専門家に質問してみよう