Jun 11 2008

Jak znaleźć plik przy pomocy VBA?

Posted by Bartek

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
 

Powiązane artykuły:

Leave a Reply