Jak znaleźć plik przy pomocy VBA?
Jeżeli pewnego dnia, ktoś zadzwoni do ciebie z pytaniem: Dlaczego od kiedy używam Excela 2007 przestały działać moje makra? -to z 90% prawdopodobieństwem możesz odpowiedzieć -- nie działa FileSearch.
Począwszy od Excela 2007 zmienił się model obiektowy wykorzystywany przez VBA -- część metod stała się niedostępna (pełną listę możesz znaleźć tutaj). Jedną z ważniejszych jest FileSearch. Nie będziemy tu dyskutowali powodów takiego stanu rzeczy -- skupimy się raczej na rozwiązaniach.
A więc
Wyszukiwanie w Excelu 2003
Jeżeli chcesz wyszukiwać dane w Excelu 2003 skorzystaj z procedury (zmodyfikowana ze strony ozgridu)
Sub Wyszukiwanie() Dim lCount As Long Dim wbResults As Workbook Dim wbCodeBook As Workbook Application.ScreenUpdating = False Application.DisplayAlerts = False Application.EnableEvents = False On Error Resume Next Set wbCodeBook = ThisWorkbook With Application.FileSearch .NewSearch 'gdzie mam szukac .LookIn = "C:\" 'czego mam szukac .Filename = "*.xls" If .Execute > 0 Then 'wszystkie pliki For lCount = 1 To .FoundFiles.Count 'Otwiera kazdy ze znalezionych plikow Set wbResults = Workbooks.Open( _ Filename:=.FoundFiles(lCount), _ UpdateLinks:=0) 'robisz cos z otwartym plikiem wbResults.Close SaveChanges:=True Next lCount End If End With On Error GoTo 0 Application.ScreenUpdating = True Application.DisplayAlerts = True Application.EnableEvents = True End Sub
Wyszukiwanie w Excelu 2007
Brak FileSearch cofa nas do czasów funkcji dir. Poniższy przykład pozwala na wyszukiwanie plików w folderze w Excelu 2007
Sub wyszukiwanie() Dim nextFile As String Dim myDir As String Dim myFile As String 'sciezka do szukania myDir = "C:\" 'czego mam szukac myFile = "*.xls" nextFile = VBA.Dir(myDir & myFile) Do Until Len(nextFile) = 0 'wyswietl nazwe pliku MsgBox nextFile 'albo otworz plik 'Dim wkb As Workbook 'Set wkb = Workbooks.Open(myDir & nextFile) nextFile = VBA.Dir() Loop End Sub
