FileSearchがエクセル2007で使えなくなって困っています

このQ&Aのポイント
  • エクセル2007でFileSearchが使えない
  • VBAに詳しい方にどのように変更すればいいか教えてほしい
  • 更新ファイルがない場合はメッセージを表示する
回答を見る
  • ベストアンサー

FileSearchがエクセル2007で使えなくなって困っています。

2003では普通に使えたのですが、2007で使うためにはどのように変えればいいのでしょうか?途方にくれているのでVBAに詳しい方ご教授ください。処理文で回答頂けるとうれしいです。 Public Sub p_更新() For i = 1 To 100: gwKillFL(i) = "": Next i With Application.FileSearch .LookIn = gAAFLD .SearchSubFolders = True .Filename = "*T" & Format(gBB, "00") & ".txt" .FileType = msoFileTypeAllFiles If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count gwKillFL(i) = .FoundFiles(i) Call p_ReadData(.FoundFiles(i)) Next i For i = 1 To .FoundFiles.Count If gwKillFL(i) <> "" Then Kill gwKillFL(i) End If Next i If gMenu1 > 0 Then Range("A2").Select MsgBox "更新", vbOKOnly, "確認" End If Else If gMenu1 > 0 Then MsgBox "更新ファイルなし。", vbOKOnly, "確認" End If End If End With End Sub

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

>Dim gwKillFL() As String '要修正 これを見落としましたね? できたという事なので良かったですけど。 >コンソールウィンドウが出ない方法... Sub test()   Const WRK = "c:\temp\out.txt" '■出力用。ファイル名適宜変更のこと。   Dim TMP As String   Dim i  As Long   Dim x  As Long   Dim n  As Long      TMP = gAAFLD & "\*T" & Format(gBB, "00") & ".txt"   CreateObject("WScript.Shell").Run _          "%ComSpec% /c dir """ & TMP & """ /b/s>" & WRK, 0, True   n = FreeFile   Open WRK For Input As #n   gwKillFL = Split(Input(LOF(n), #n), vbCrLf)   Close #n   Kill WRK      x = UBound(gwKillFL)   If x > 0 Then   ': 以下変更なしです。

rion2010
質問者

お礼

end-uさん。 お忙しい中、回答ありがとうございます。 Open WRK For Input As #nのところでパス名が無効ですと出てきます。 あと、出力用。ファイル名適宜変更のこととありますが、それは更新されるエクセルファイルの場所のことでしょうか?

その他の回答 (3)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

コンソールウィンドウを出さないように、 DIRコマンドの結果をファイルに一旦出力して取り込みます。 このファイルを >Const WRK = "c:\temp\out.txt" '■出力用。ファイル名適宜変更のこと。 ここで指定します。 任意のファイル名に変更してもらって結構です。 あとで >Kill WRK 削除しています。 >Open WRK For Input As #nのところでパス名が無効ですと出てきます。 このエラーが出るという事は "c:\temp\out.txt"とした場合、Cドライブに"temp"という名前のフォルダがない場合のエラーでしょう。 適当なフォルダに変更してください。 (そのフォルダに書き込みできる権限がないといけません) #私の書き方が悪い所為もあるのかもしれませんが、 #この点まで自力で解決できないとなると今後のコードメンテが心配です。 #自作せずにどっかでフリーソフトでも探したほうが良いような。

rion2010
質問者

お礼

回答ありがとうございます。 ご意見ごもっともででございますが、このソフトは仕事の前任者が制作したものであり、今連絡がつかない状況でございます。他の者はパソコン知識がゼロなもので、初心者ではありますが、私がやらなければならない状況であります。 end-uさん。ありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

ファイル名でのソートが必要でしょうか? 必要なければDIRコマンドを使った簡易な手法があります。 Option Explicit ': Dim gwKillFL() As String '要修正 ': Sub test()   Dim TMP As String   Dim WRK As String   Dim i  As Long   Dim x  As Long   TMP = gAAFLD & "\*T" & Format(gBB, "00") & ".txt"   WRK = CreateObject("WScript.Shell").Exec _      ("%ComSpec% /c dir """ & TMP & """ /a/b/s") _      .StdOut.ReadAll   gwKillFL = Split(WRK, vbCrLf)   x = UBound(gwKillFL)   If x > 0 Then     For i = 0 To x - 1       Debug.Print gwKillFL(i)    '確認用       'Call p_ReadData(gwKillFL(i)) 'コメントアウトしてあります。       If gwKillFL(i) <> "" Then         'Kill gwKillFL(i)     'コメントアウトしてあります。       End If     Next     If gMenu1 > 0 Then       Range("A2").Select       MsgBox "更新", vbOKOnly, "確認"     End If   Else     If gMenu1 > 0 Then       MsgBox "更新ファイルなし。", vbOKOnly, "確認"     End If   End If End Sub コンソールウィンドウが一瞬出ます。 気になるようだったらファイルに一旦出力して取り込む方法もあります。

rion2010
質問者

お礼

回答ありがとうございます。 gwKillFL = Split(WRK, vbCrLf)のところで配列には割り当てられませんとでてしまいます。 どうしたら良いのでしょうか? もし、よければ回答のほうよろしくお願いします。

rion2010
質問者

補足

end-uさん。 しばらく悩みましたが、できました。 ありがとうございます。 コンソールウィンドウが出ない方法もあるんですか? もし、よければよろしくお願いします。

  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

2007では、ファイルサーチはなくなっています。 ですので、自分で、ファイルサーチ等を作らないと いけなくなります。 この辺がヒントになります。 http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200701/07010088.txt

rion2010
質問者

お礼

ありがとうございます。 頑張ってはみたのですが、初心者なものでよく解りません。 ですが、大変参考になりました。

関連するQ&A

  • 【ファイルサーチ】指定のフォルダーではなく自分で選択したフォルダー内のファイルの総数をカウントしたい

    お世話になります。指定のフォルダーではなく自分で選択したフォルダー内の"csvファイル"の総数をカウントしたいのですがうまくいきません。アドバイスお願いいたします。 With Application.FileSearch .LookIn = Application.GetOpenFilename .Filename = "*.csv" If .Execute > 0 Then MsgBox .FoundFiles.Count & "個" End If For i = 1 To .FoundFiles.Count MsgBox .FoundFiles(i) Next i End With

  • VBAのFileSearchでFoundFiles(i)の作成日時を取得したい

    タイトルどおりですが、Fileオブジェクトには DateCreatedプロパティーがあるようですが、 どこでこれを使用していいのかわかりません。 したのはHELPのサンプルですが、どうしたらいい ものでしょうか? With Application.FileSearch If .Execute() > 0 Then MsgBox .FoundFiles.Count & _" 個のファイルが見つかりました。" For i = 1 To .FoundFiles.Count Debug.Print .FoundFiles(i) Next i Else MsgBox "検索条件を満たすファイルはありません。" End If End With

  • VBAで、[.FoundFiles.count]で取得した値の変数Cへの渡し方

    VBAで、[.FoundFiles.count]で取得した値を C=.FoundFiles.count(理想) としたいです。そして以下のコードのFor文の.FoundFiles.countをCとしたいのですが、思うようにいきません。その方法を教えて頂きたいのです。宜しくお願い致します。 With Application.FileSearch .LookIn = largept .Filename = "*.txt" If .Execute > 0 Then   For i = 1 to .FoundFiles.Count     ...     処理     ...   Next i Else End If End With

  • Excel VBAのFileSearch機能

    初めて投稿します。助けてください。 以下のVBAを使用して業務を行っているのですが このマクロが動かなくなってしまいました。 ネット等で調べてわかったのですが XP問題で社内PCがすべて変わりExcelも2013になってしまい 2013では、下記に記載されているFileSearch機能が使用できないようです。 出来れば下記の分をExcel2013でも 動くようにどの部分を変更すればいいいか教えていただけないでしょうか? ---------------------<VBA文>------------------------- Sub 作成() Dim i, j, no As Integer Dim Mpath, Mname, Mfull As String Mpath = ActiveWorkbook.Path Mname = ActiveWorkbook.Name Mfull = Mpath & "\" & Mname Worksheets("一覧").Select Range("A2:A200").Clear With Application.FileSearch .NewSearch .LookIn = Mpath .Filename = "*.xls" .FileType = msoFileTypeExcelWorkbooks If .Execute > 0 Then For i = 1 To .Execute If .FoundFiles(i) <> Mfull Then Cells(i + 1, 1).Value = .FoundFiles(i) j = Len(Cells(i + 1, 1)) If j > 218 Then MsgBox ("218文字を超えてます。") Exit Sub End If End If Next i Else MsgBox ("見つかりませんでした。") End If End With   Range("A2").Select Range("A2:A1000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal End Sub

  • 複数検索方法

    マクロ(Excel)にて検索できるものを作成しています。 例えばネットワークドライブにて割り当てたH22(Zドライブ)~H1(Gドライブ)というフォルダがあり、UserForm1にてH22~H1のチェックボックスを作成しています。ここでH22とH21のチェックボックスにチェックを入れキーワードを入力し検索すると、H22とH21のフォルダ内になるキーワードと同じファイル名をフォルダ名と同じのシートに検索結果を表示したいです。 しかし、下記のようにすると、1つずつの検索は可能なのですが、複数チェック(H22とH21)入れると H22を検索し終わった後、もう一度キーワードを入力しないとH21を検索してくれません。 複数チェックし1回のキーワード入力で検索するにはどうすれば良いですか? 説明が下手ですが、よろしくお願いします。 Private Sub CommandButton1_Click() If CheckBox1 = True Then Sheets("H22").Visible = True Sheets("H22").Select With Application.FileSearch .NewSearch .LookIn = "Z:\" buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf .SearchSubFolders = True If .Execute() > -5 Then MsgBox .FoundFiles.Count - 5 & " 個のファイルが見つかりました", vbOKOnly, "検索結果" For 検索結果 = 6 To .FoundFiles.Count Cells(検索結果, 3) = .FoundFiles(検索結果) Next 検索結果 Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing For i = 6 To 検索結果 Step 1 Cells(i, 3).Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 3).Value End With Next i ElseIf CheckBox2 = True Then Sheets("H21").Visible = True Sheets("H21").Select With Application.FileSearch .NewSearch .LookIn = "Y:\" buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf .SearchSubFolders = True If .Execute() > -5 Then MsgBox .FoundFiles.Count - 5 & " 個のファイルが見つかりました", vbOKOnly, "検索結果" For 検索結果 = 6 To .FoundFiles.Count Cells(検索結果, 3) = .FoundFiles(検索結果) Next 検索結果 Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing For i = 6 To 検索結果 Step 1 Cells(i, 3).Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 3).Value End With Next i  ・  ・  ・ End If End Sub

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

    Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "ア") = 0 Then If InStr(.Cells(i, "D"), "ア(半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub このエクセルマクロはC列に「ア」があって、D列に「ア(半角)」の文字がない場合はメッセージというマクロなのですが、このマクロをア~ンまで同じ作業をしたいのですが、ひとまとめにマクロを組む事はできるのでしょうか?できる場合どのようにすれば良いでしょうか? 下記のようにして見たのですができませんでした。 Sub ア_Click() Dim i As Long With ActiveSheet For i = 5 To .Cells(Rows.count, "C").End(xlUp).Row If InStr(.Cells(i, "C"), "[ア-ン]") = 0 Then If InStr(.Cells(i, "D"), "[ア-ン](半角)") = 0 and .Cells(i,"D")<>"" Then MsgBox i & "行目" Cells(i, 2).Offset(0, -1).Value = "★" End If End If Next i End With End Sub

  • エクセル、ワークシートが保護されているかどうかを判断するVBAは?

    以下のように書いてもダメでした。 どう直せばよいでしょうか? Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).Protect = False Then MsgBox Worksheets(i).Name End If Next End Sub

  • FileSearchが使えなくなり困ってます。

    仕事場で前任者が下記のようなマクロを組んでいたのですが、「FileSearch」が使用できなくなり、なおさなくてはいけなくて困ってます。 指定の保存先から、アクティブセルと同じ保存名のファイル(エクセル)を開く内容なのですが、お分かりになるかた知恵を拝借願いますでしょうか? 素人なので、できれば専門用語じゃない回答をいただけるとありがたいです。 よろしくお願い致します。 Dim p As Range For Each p In Selection If p = "" Then Exit Sub End If With Application.FileSearch .Filename = p .LookIn = "保存先" .SearchSubFolders = True .LastModified = msoLastModifiedAnyTime .FileType = msoFileTypeExcelWorkbooks .SearchSubFolders = xt .Execute For Each f In .FoundFiles Workbooks.Open f Next f End With Next p End Sub

  • 改善コードを教えてください。

    EXCEL2003で作成したマクロが2010で下記のコードが動作しません。 どう修正したらいいか教えてください 。 できれば、具体的なコードを書いていただけると、助かります。 ' With Application.FileSearch ' .NewSearch ' .LookIn = TXP_hozon_saki ' .Filename = ".TXP" ' .SearchSubFolders = True ' ' If .Execute() = 0 Then ' MsgBox "TXPファイルなし", vbOKOnly, "参照ファイルエラー" ' Exit Sub ' End If ' For KensakuSuu = 1 To .FoundFiles.Count ' TXP_hozon_name(1, KensakuSuu) = .FoundFiles(KensakuSuu) ' Next KensakuSuu ' End With 上記コードは、拡張子.TXPというファイルを検索して、動作させるものです。

  • エクセルVBA:取得したファイル情報を別シートに貼るには・・・

    いつもお世話になっています。 今エクセルVBAで指定したフォルダ内のファイル情報を取得し、sheet2に貼り付けるものを作っています。 指定したフォルダ内のファイル情報を取得するまでは分かったのですが、作ったVBAを実行するとsheet1のA2セルから自動的に貼り付けられてしまいます。 sheet2のA1セルから貼り付けるにはどうすれば良いのでしょうか?? 作ったVBAはこんな感じです。 まず、フォルダのパスを取得しA2セルへ表示します。 Sub test2()  With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then Exit Sub Range("A2").Value = .SelectedItems(1) End With End Sub 次に、A2セルの値を使ってファイル名を取得しました。 Sub Test() Dim i As Long Dim pass As String pass = Range("A2").Value With Application.FileSearch .NewSearch .LookIn = pass .FileType = msoFileTypeAllFiles .SearchSubFolders = True If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + 1, 1) = .FoundFiles(i) Cells(i + 1, 3) = FileDateTime(.FoundFiles(i)) Next i End If End With End Sub です。 長くて申し訳ありません。よろしくお願いします。

専門家に質問してみよう