Open – Otwieranie skoroszytu na 3 sposoby

Metoda Workbooks.Open z zaszytą ścieżką w kodzie

Open to polecenie otwierające skoroszyt Excel, który wymaga wskazania pełnej ścieżki pliku. Można też podać samą nazwę pliku jeśli znajduje się w tzw. bieżącym folderze, ale to temat na inną lekcję.

W folderze mam kilka plików różnego typu i w poleceniu Workbooks.Open podaję ścieżkę do pliku Maile.xlsx. Przykładowa procedura może wyglądać w taki sposób.

open z wymaganym parametrem

Metoda z wprowadzeniem ścieżki za pomocą okienka Inputbox

Inputbox to okno, które przyjmuje tekst wprowadzony przez użytkownika i pozwala na użycie go w programie. Dla wygody można zadeklarować sobie zmienną typu String, która przyjmie wartość z Inputboxa, a następnie wpisać polecenie Workbooks.Open nazwa_zmiennej.

inputbox przyjmuje sciezke do metody open

Użycie polecenia GetOpenFilename pozwalające użytkownikowi na wskazanie pliku w oknie eksploratora

GetOpenFileName to metoda aplikacji Excel, która wywołuje okno eksploratora i po wybraniu pliku pobiera pełną ścieżkę do tego pliku. Przykładowa procedura może wyglądać tak.

metoda GetOpenFilename zwraca sciezke do metody Open

Okno eksploratora pokazuje wszystkie pliki w folderze, z których użytkownik wybiera ten, który go interesuje.

GetOpenFileName ma możliwość użycia dodatkowych argumentów. Jednym z nich jest FileFilter, który pozwala wyświetlać w oknie dialogowym wyłącznie pliki spełniające kryterium. Dodam filtr, który w oknie dialogowym wskaże wyłącznie pliki Excela. Używając zapisu rozszerzenia *.xls* sprawię, że wszystkie pliki Excela będą w tym filtrze uwzględnione.

Workbooks.Open z argumentem MultiSelect

Gdybym chciał otworzyć kilka plików to GetOpenFileName ma jeszcze jeden ciekawy argument czyli MultiSelect, który domyślnie ma wartość False. Zmieniając jego wartość na True zezwalam użytkownikowi na zaznaczenie kilku plików.

Efektem zaznaczenia kilku plików to powstanie tablicy elementów, której zmienna typu String nie przyjmie, dlatego zamienię ją na typ Variant zostawiając deklarację bez wskazania typu.

Ale to nie wszystko, ponieważ polecenie Workbooks.Open nazwa_zmiennej nie poradzi sobie ze zmienną przechowującą tablicę elementów. W tym celu Workbooks.Open wstawiam w pętlę For Next, która wykona się tyle razy, ile jest elementów tablicy.

Deklaruję dodatkową zmienną iteracyjną i, która będzie przyjmować niewielkie liczby dlatego nadam jej typ Byte. Dzięki poleceniu UBound(nazwa_zmiennej) jestem w stanie wskazać indeks ostatniego elementu tablicy co pozwoli na stworzenie dynamicznego zakresu. Pętla więc nada zmiennej i wartości od 1 do UBound(plik).

Do polecenia Workbooks.Open plik muszę dopisać tylko indeks, więc polecenie przyjmie postać Workbooks.Open plik(i), co spowoduje, że przy każdym kolejnym przejściu pętli otwierany będzie inny plik.

Jeśli chcesz zobaczyć w jaki sposób tworzę to makro na filmie to sprawdź na YT:

Spodobał Ci się artykuł ? Udostępnij go znajomym.

Share on facebook
Share on linkedin
Share on twitter

4 thoughts on “Open – Otwieranie skoroszytu na 3 sposoby”

  1. Dziękuję za cenne informacje. A jak otworzyc plik ze zmienna data. Np grafik140322.xls lub grafik210322 itd. Stala jest nazwa grafik a potem zmienna data. Np po wpisaniu daty poczatku tyg w inputbox otwiera sie excel grafik+data:)? Utknelam na tym i nie moge przejsc dalej.dziekuje

  2. Cześć Dariusz,

    mam podobny problem co Monika. Obejrzałam Twój film, który podałeś w komentarzu, ale niestety nie znalazłam odpowiedzi na mój problem. Czy mógłbyś napisać/nagrać filmik, jak otworzyć plik z datą (u mnie nazwa pliku „export_csv_20231103”). Dodam, że jest to najnowszy pobrany plik. Czy można napisać makro tak, żeby otworzyć w excelu najnowszy pobrany plik w formacie csv?

    Z góry dziękuję za podpowiedź,

    Martyna

    1. Dariusz Skórniewski

      Cześć,
      Zmieniłem trochę makro otwierające plik z datą na Twój przykład i wygląda tak:
      Sub OtworzGrafikZData()

      Dim plik As String
      Dim data As String

      data = InputBox(„Podaj datę grafiku do otwarcia w formacie 'rrrrmmdd'”)

      Workbooks.OpenText Filename:=”C:\Users\Lenovo\Downloads\export_csv_” & data, DataType:=xlDelimited, _
      TextQualifier:=xlDoubleQuote, Semicolon:=True, origin:=65001

      End Sub

      Musiałem w nim określić ogranicznik i w przypadku pliku csv jaki miałem był to Semicolon czyli średnik. Dodatkowo dorzuciłem pochodzenie pliku origin:=65001, aby polskie znaki diakrytyczne prawidłowo się wyświetlały po otwarciu pliku. 65001 to oznaczenie UTF-8 bo akurat taki plik miałem.

      Co do drugiego pytania, to nie wiem jak za pomocą VBA otworzyć najświeższy plik, pewnie trzeba by zrobić pętlę przechodzącą przez plik, rejestrującą ich daty zapisu i następnie wybrania najświeższej, ale to nie ma sensu. Możesz skorzystać z Power Query, gdzie odwołasz się do folderu plików i poprzez filtrowanie wybierzesz ten z najświeższą datą i będzie działać.
      Pozdrawiam
      Darek

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *