Articles

Korzystanie z obiektu skoroszytu w programie Excel VBA (Otwórz, Zamknij, Zapisz, Ustaw)

w tym samouczku omówię, jak pracować ze skoroszytami w programie Excel przy użyciu VBA.

w programie Excel „skoroszyt” to obiekt będący częścią kolekcji „skoroszytów”. W skoroszycie znajdują się różne obiekty, takie jak arkusze, arkusze Wykresów, komórki i zakresy, obiekty Wykresów, kształty itp.

dzięki VBA możesz robić wiele rzeczy za pomocą obiektu skoroszytu-na przykład otwierać określony skoroszyt, zapisywać i zamykać skoroszyty, tworzyć nowe skoroszyty, zmieniać właściwości skoroszytu itp.

więc zaczynajmy.

wszystkie kody, o których wspominam w tym tutorialu, muszą być umieszczone w Edytorze Visual Basic. Przejdź do sekcji „gdzie umieścić kod VBA”, aby dowiedzieć się, jak to działa.

Jeśli jesteś zainteresowany nauką VBA w łatwy sposób, sprawdź moje szkolenie online Excel VBA.

Ten samouczek obejmuje:

odwoływanie się do skoroszytu za pomocą VBA

istnieją różne sposoby odwoływania się do obiektu skoroszytu w VBA. Metoda, którą wybierzesz, zależy od tego, co chcesz zrobić. W tej sekcji omówię różne sposoby odwoływania się do skoroszytu wraz z przykładowymi kodami.

używanie nazw skoroszytów

Jeśli masz dokładną nazwę skoroszytu, do którego chcesz się odwołać, możesz użyć nazwy w kodzie.

zacznijmy od prostego przykładu.

Jeśli masz otwarte dwa skoroszyty i chcesz aktywować skoroszyt z nazwą-przykłady.xlsx, możesz użyć poniższego kodu:

Sub ActivateWorkbook()Workbooks("Examples.xlsx").ActivateEnd Sub

pamiętaj, że musisz użyć nazwy pliku wraz z rozszerzeniem, jeśli plik został zapisany. Jeśli nie został zapisany, możesz użyć nazwy bez rozszerzenia pliku.

Jeśli nie wiesz, jakiej nazwy użyć, skorzystaj z pomocy eksploratora projektu.

arkusze robocze obiekt w programie Excel VBA - nazwa pliku w Eksploratorze projektu

Jeśli chcesz aktywować skoroszyt i wybrać określoną komórkę w arkuszu w tym skoroszycie, musisz podać cały adres komórki (w tym skoroszyt i nazwę arkusza roboczego).

Sub ActivateWorkbook()Workbooks("Examples.xlsx").Worksheets("Sheet1").ActivateRange("A1").SelectEnd Sub

powyższy kod najpierw aktywuje Sheet1 w przykładach.skoroszyt xlsx, a następnie wybiera komórkę A1 w arkuszu.

często zobaczysz kod, w którym odniesienie do arkusza roboczego lub komórki/zakresu jest wykonywane bez odwoływania się do skoroszytu. Dzieje się tak, gdy odwołujesz się do arkusza/zakresów w tym samym skoroszycie, w którym znajduje się kod i który jest również aktywnym skoroszytem. Jednak w niektórych przypadkach musisz określić skoroszyt, aby upewnić się, że kod działa (więcej na ten temat w sekcji ThisWorkbook).

używając numerów indeksowych

Możesz również odwoływać się do skoroszytów na podstawie ich numeru indeksowego.

na przykład, jeśli masz otwarte trzy skoroszyty, poniższy kod wyświetli nazwy trzech skoroszytów w polu wiadomości (pojedynczo).

Sub WorkbookName()MsgBox Workbooks(1).NameMsgBox Workbooks(2).NameMsgBox Workbooks(3).NameEnd Sub

powyższy kod używa MsgBox – która jest funkcją, która pokazuje okno wiadomości z określonym tekstem / wartością (która jest nazwą skoroszytu w tym przypadku).

jednym z problemów, które często mam przy użyciu numerów indeksowych ze skoroszytami, jest to, że nigdy nie wiadomo, który z nich jest pierwszym skoroszytem, a który drugim i tak dalej. Aby mieć pewność, musisz uruchomić kod jak pokazano powyżej lub coś podobnego do pętli przez otwarte skoroszyty i znać ich Numer indeksu.

Excel traktuje skoroszyt otwarty jako pierwszy, aby mieć numer indeksu jako 1, a następny jako 2 i tak dalej.

pomimo tej wady, użycie numerów indeksowych może się przydać. Na przykład, jeśli chcesz przejrzeć wszystkie otwarte skoroszyty i zapisać wszystko, możesz użyć numerów indeksów. W tym przypadku, ponieważ chcesz, aby stało się to ze wszystkimi skoroszytami, nie martwisz się o ich indywidualne numery indeksowe.

poniższy kod zapętliłby wszystkie otwarte skoroszyty i zamknął wszystkie z wyjątkiem skoroszytu, który ma ten kod VBA.

Sub CloseWorkbooks()Dim WbCount As IntegerWbCount = Workbooks.CountFor i = WbCount To 1 Step -1If Workbooks(i).Name <> ThisWorkbook.Name ThenWorkbooks(i).CloseEnd IfNext iEnd Sub

powyższy kod zlicza liczbę otwartych skoroszytów, a następnie przechodzi przez wszystkie skoroszyty za pomocą pętli For Each.

używa warunku IF, aby sprawdzić, czy nazwa skoroszytu jest taka sama jak nazwa skoroszytu, w którym uruchamiany jest kod.

Jeśli nie pasuje, zamyka skoroszyt i przechodzi do następnego.

zauważ, że uruchomiliśmy pętlę od WbCount do 1 z krokiem -1. Odbywa się to tak, jak w przypadku każdej pętli, liczba otwartych skoroszytów maleje.

Ta książka jest szczegółowo omówiona w dalszej części.

Korzystanie z ActiveWorkbook

ActiveWorkbook, jak sama nazwa wskazuje, odnosi się do skoroszytu, który jest aktywny.

poniższy kod pokaże Ci nazwę aktywnego skoroszytu.

Sub ActiveWorkbookName()MsgBox ActiveWorkbook.NameEnd Sub

gdy używasz VBA do aktywacji innego skoroszytu, część ActiveWorkbook w VBA po tym zacznie odnosić się do aktywowanego skoroszytu.

oto przykład tego.

Jeśli masz aktywny skoroszyt i wstawiasz do niego następujący kod i uruchamiasz go, najpierw wyświetli nazwę skoroszytu zawierającego kod, a następnie nazwę przykładów.xlsx (który zostaje aktywowany przez kod).

Sub ActiveWorkbookName()MsgBox ActiveWorkbook.NameWorkbooks("Examples.xlsx").ActivateMsgBox ActiveWorkbook.NameEnd Sub

zauważ, że po utworzeniu nowego skoroszytu przy użyciu VBA, nowo utworzony skoroszyt automatycznie staje się aktywnym skoroszytem.

używanie ThisWorkbook

ThisWorkbook odnosi się do skoroszytu, w którym kod jest wykonywany.

każdy skoroszyt będzie miał obiekt ThisWorkbook jako jego część (widoczny w Eksploratorze projektu).

obiekt skoroszytu w VBA - ThisWorkbook

’ThisWorkbook’ może przechowywać zwykłe makra (podobne do tych, które dodajemy do modułów), a także procedury zdarzeń. Procedura zdarzenia to coś, co jest wyzwalane na podstawie zdarzenia-na przykład dwukrotne kliknięcie komórki lub zapisanie skoroszytu lub aktywowanie arkusza roboczego.

każda procedura zdarzenia zapisana w tym „ThisWorkbook” będzie dostępna w całym skoroszycie, w porównaniu do zdarzeń na poziomie arkusza, które są ograniczone tylko do konkretnych arkuszy.

na przykład, jeśli dwukrotnie klikniesz obiekt ThisWorkbook w Eksploratorze projektu i skopiujesz i wkleisz w nim poniższy kod, pokaże On adres komórki za każdym razem, gdy dwukrotnie klikniesz dowolną z komórek w całym skoroszycie.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)MsgBox Target.AddressEnd Sub

chociaż główną rolą ThisWorkbook jest przechowywanie procedury zdarzenia, Możesz również użyć go do odwołania się do skoroszytu, w którym kod jest wykonywany.

poniższy kod zwróci nazwę skoroszytu, w którym kod jest wykonywany.

Sub ThisWorkbookName()MsgBox ThisWorkbook.NameEnd Sub

zaletą korzystania z ThisWorkbook (zamiast ActiveWorkbook) jest to, że we wszystkich przypadkach odnosi się do tego samego skoroszytu (tego, który zawiera kod). Więc jeśli użyjesz kodu VBA, aby dodać nowy skoroszyt, ActiveWorkbook zmieni się, ale ThisWorkbook nadal będzie odnosił się do tego, który ma kod.

Tworzenie nowego obiektu skoroszytu

poniższy kod utworzy nowy skoroszyt.

Sub CreateNewWorkbook()Workbooks.AddEnd Sub

Po dodaniu nowego skoroszytu staje się on aktywnym skoroszytem.

poniższy kod doda nowy skoroszyt, a następnie pokaże nazwę tego skoroszytu (który byłby domyślną nazwą typu Book1).

Sub CreateNewWorkbook()Workbooks.AddMsgBox ActiveWorkbook.NameEnd Sub

otwórz skoroszyt za pomocą VBA

możesz użyć VBA, aby otworzyć określony skoroszyt, gdy znasz ścieżkę pliku skoroszytu.

poniższy kod otworzy skoroszyt-przykłady.xlsx, który znajduje się w folderze Dokumenty w moim systemie.

Sub OpenWorkbook()Workbooks.Open ("C:\Users\sumit\Documents\Examples.xlsx")End Sub

w przypadku, gdy plik istnieje w folderze domyślnym, który jest folderem, w którym VBA domyślnie zapisuje nowe pliki, możesz po prostu podać nazwę skoroszytu – bez całej ścieżki.

Sub OpenWorkbook()Workbooks.Open ("Examples.xlsx")End Sub

w przypadku, gdy skoroszyt, który próbujesz otworzyć, nie istnieje, zobaczysz błąd.

aby uniknąć tego błędu, możesz dodać kilka linii do kodu, aby najpierw sprawdzić, czy plik istnieje, czy nie i jeśli istnieje, spróbuj go otworzyć.

poniższy kod sprawdzi lokalizację pliku, a jeśli nie istnieje, wyświetli niestandardowy komunikat (Nie komunikat o błędzie):

Sub OpenWorkbook()If Dir("C:\Users\sumit\Documents\Examples.xlsx") <> "" ThenWorkbooks.Open ("C:\Users\sumit\Documents\Examples.xlsx")ElseMsgBox "The file doesn't exist"End IfEnd Sub

Możesz również użyć okna dialogowego Otwórz, aby wybrać plik, który chcesz otworzyć.

Sub OpenWorkbook()On Error Resume NextDim FilePath As StringFilePath = Application.GetOpenFilenameWorkbooks.Open (FilePath)End Sub

powyższy kod otwiera okno dialogowe Otwórz. Po wybraniu pliku, który chcesz otworzyć, zostanie przypisana ścieżka do pliku do zmiennej FilePath. Skoroszyty.Otwórz, a następnie użyj ścieżki do pliku, aby otworzyć plik.

w przypadku, gdy użytkownik nie otworzy pliku i kliknie przycisk Anuluj, FilePath staje się False. Aby uniknąć błędu w tym przypadku, użyliśmy instrukcji 'On Error CV Next’.

powiązane: dowiedz się wszystkiego o obsłudze błędów w programie Excel VBA

zapisywanie skoroszytu

aby zapisać aktywny skoroszyt, użyj poniższego kodu:

Sub SaveWorkbook()ActiveWorkbook.SaveEnd Sub

ten kod działa dla skoroszytów, które zostały już zapisane wcześniej. Ponadto, ponieważ skoroszyt zawiera powyższe makro, jeśli nie został zapisany jako.xlsm (lub .plik xls), stracisz makro po następnym otwarciu.

Jeśli zapisujesz skoroszyt po raz pierwszy, wyświetli się monit, jak pokazano poniżej:

obiekt skoroszytu w VBA - Ostrzeżenie podczas zapisywania skoroszytu po raz pierwszy

podczas zapisywania po raz pierwszy lepiej jest użyć opcji „Saveas”.

poniższy kod zapisałby aktywny skoroszyt jako .plik xlsm w domyślnej lokalizacji (która jest folderem dokumentu w moim systemie).

Sub SaveWorkbook()ActiveWorkbook.SaveAs Filename:="Test.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

Jeśli chcesz, aby plik został zapisany w określonej lokalizacji, musisz o tym wspomnieć w wartości nazwa pliku. Poniższy kod zapisuje plik na moim pulpicie.

Sub SaveWorkbook()ActiveWorkbook.SaveAs Filename:="C:\Users\sumit\Desktop\Test.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

Jeśli chcesz, aby użytkownik mógł wybrać lokalizację, w której ma zapisać plik, możesz użyć wywołania okna dialogowego Saveas. Poniższy kod pokazuje okno dialogowe Saveas i pozwala użytkownikowi wybrać lokalizację, w której plik ma zostać zapisany.

Sub SaveWorkbook()Dim FilePath As StringFilePath = Application.GetSaveAsFilenameActiveWorkbook.SaveAs Filename:=FilePath & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

zauważ, że zamiast używać FileFormat:=xlOpenXMLWorkbookMacroEnabled, możesz również użyć FileFormat:=52, gdzie 52 to kod xlOpenXMLWorkbookMacroEnabled.

zapisywanie wszystkich otwartych skoroszytów

Jeśli masz więcej niż jeden skoroszyt otwarty i chcesz zapisać wszystkie skoroszyty, możesz użyć poniższego kodu:

Sub SaveAllWorkbooks()Dim wb As WorkbookFor Each wb In Workbookswb.SaveNext wbEnd Sub

powyższe zapisuje wszystkie skoroszyty, w tym te, które nigdy nie zostały zapisane. Skoroszyty, które nie zostały wcześniej zapisane, zostaną zapisane w domyślnej lokalizacji.

Jeśli chcesz zapisać tylko te skoroszyty, które zostały wcześniej zapisane, możesz użyć poniższego kodu:

Sub SaveAllWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Path <> "" Thenwb.SaveEnd IfNext wbEnd Sub

Zapisywanie i zamykanie wszystkich skoroszytów

Jeśli chcesz zamknąć wszystkie skoroszyty, z wyjątkiem skoroszytu, który zawiera bieżący kod, możesz użyć poniższego kodu:

Sub CloseandSaveWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Name <> ThisWorkbook.Name Thenwb.Close SaveChanges:=TrueEnd IfNext wbEnd Sub

powyższy kod zamknie wszystkie skoroszyty (z wyjątkiem skoroszytu, który ma kod – ThisWorkbook). W przypadku zmian w tych skoroszytach zmiany zostaną zapisane. W przypadku, gdy istnieje skoroszyt, który nigdy nie został zapisany, pojawi się okno dialogowe Zapisz jako.

Zapisz kopię skoroszytu (ze znacznikiem czasu)

kiedy pracuję ze złożonymi danymi i pulpitem nawigacyjnym w skoroszytach programu Excel, często tworzę różne wersje moich skoroszytów. Jest to pomocne w przypadku, gdy coś pójdzie nie tak z moim bieżącym skoroszytem. Chciałbym przynajmniej mieć jego kopię zapisaną pod inną nazwą (i straciłbym tylko pracę, którą wykonałem po utworzeniu kopii).

oto kod VBA, który utworzy kopię skoroszytu i zapisze go w określonej lokalizacji.

Sub CreateaCopyofWorkbook()ThisWorkbook.SaveCopyAs Filename:="C:\Users\sumit\Desktop\BackupCopy.xlsm"End Sub

powyższy kod zapisuje kopię skoroszytu za każdym razem, gdy uruchamiasz to makro.

chociaż działa to świetnie, czułbym się bardziej komfortowo, gdybym miał zapisane różne kopie za każdym razem, gdy uruchamiam ten kod. Ważne jest to, że jeśli popełnię nieumyślny błąd i uruchomię to makro, to zapisze pracę z błędami. I nie miałbym dostępu do pracy, zanim nie popełniłbym błędu.

aby poradzić sobie z takimi sytuacjami, możesz użyć poniższego kodu, który zapisuje nową kopię pracy za każdym razem, gdy ją zapisujesz. Dodaje również datę i znacznik czasu jako część nazwy skoroszytu. Może to pomóc w śledzeniu błędów, które popełniłeś, ponieważ nigdy nie stracisz żadnej z wcześniej utworzonych kopii zapasowych.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)ThisWorkbook.SaveCopyAs Filename:="C:\Users\sumit\Desktop\BackupCopy" & Format(Now(), "dd-mm-yy-hh-mm-ss-AMPM") & ".xlsm"End Sub

powyższy kod tworzy kopię za każdym razem, gdy uruchamiasz to makro i dodajesz znacznik daty / czasu do nazwy skoroszytu.

Utwórz nowy skoroszyt dla każdego arkusza roboczego

w niektórych przypadkach możesz mieć skoroszyt z wieloma arkuszami roboczymi i chcesz utworzyć skoroszyt dla każdego arkusza roboczego.

może tak być, gdy masz raporty miesięczne/kwartalne w jednym skoroszycie i chcesz podzielić je na jeden skoroszyt dla każdego arkusza.

lub, jeśli masz raporty mądre działu i chcesz podzielić je na poszczególne skoroszyty, tak, że można wysłać te poszczególne skoroszyty do kierowników działów.

oto kod, który utworzy skoroszyt dla każdego arkusza roboczego, nada mu taką samą nazwę jak arkusz roboczy i zapisze go w określonym folderze.

Sub CreateWorkbookforWorksheets()Dim ws As WorksheetDim wb As WorkbookFor Each ws In ThisWorkbook.WorksheetsSet wb = Workbooks.Addws.Copy Before:=wb.Sheets(1)Application.DisplayAlerts = Falsewb.Sheets(2).DeleteApplication.DisplayAlerts = Truewb.SaveAs "C:\Users\sumit\Desktop\Test\" & ws.Name & ".xlsx"wb.CloseNext wsEnd Sub

w powyższym kodzie użyliśmy dwóch zmiennych 'ws’ i 'wb’.

kod przechodzi przez każdy arkusz roboczy (używając dla każdej następnej pętli) i tworzy dla niego skoroszyt. Używa również metody kopiowania obiektu arkusza roboczego, aby utworzyć kopię arkusza roboczego w nowym skoroszycie.

zauważ, że użyłem instrukcji SET, aby przypisać zmienną ” wb ” do dowolnego nowego skoroszytu utworzonego przez kod.

możesz użyć tej techniki, aby przypisać obiekt skoroszytu do zmiennej. Jest to omówione w następnej sekcji.

Przypisz obiekt skoroszytu do zmiennej

w VBA możesz przypisać obiekt do zmiennej, a następnie użyć zmiennej, aby odnieść się do tego obiektu.

na przykład w poniższym kodzie używam VBA, aby dodać nowy skoroszyt, a następnie przypisać ten skoroszyt do zmiennej WB. Aby to zrobić, muszę użyć instrukcji SET.

po przypisaniu skoroszytu do zmiennej wszystkie właściwości skoroszytu są również dostępne dla zmiennej.

Sub AssigntoVariable()Dim wb As WorkbookSet wb = Workbooks.Addwb.SaveAs Filename:="C:\Users\sumit\Desktop\Examples.xlsx"End Sub

należy pamiętać, że pierwszym krokiem w kodzie jest zadeklarowanie 'WB’ jako zmiennej typu skoroszytu. To mówi VBA, że ta zmienna może pomieścić obiekt skoroszytu.

Następna Instrukcja używa SET, aby przypisać zmienną do nowego skoroszytu, który dodajemy. Po wykonaniu tego zadania możemy użyć zmiennej WB, aby zapisać skoroszyt (lub zrobić z nim cokolwiek innego).

zapętlanie poprzez otwarte skoroszyty

widzieliśmy już kilka przykładowych kodów powyżej, które używały zapętlenia w kodzie.

w tej sekcji wyjaśnię różne sposoby pętli przez otwarte skoroszyty za pomocą VBA.

Załóżmy, że chcesz zapisać i zamknąć wszystkie otwarte skoroszyty, z wyjątkiem tego z kodem w nim, możesz użyć poniższego kodu:

Sub CloseandSaveWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Name <> ThisWorkbook.Name Thenwb.Close SaveChanges:=TrueEnd IfNext wbEnd Sub

powyższy kod używa dla każdej pętli, aby przejść przez każdy skoroszyt w kolekcji skoroszytów. Aby to zrobić, najpierw musimy zadeklarować ’ WB ’ jako zmienną typu skoroszytu.

w każdym cyklu pętli każda nazwa skoroszytu jest analizowana i jeśli nie pasuje do nazwy skoroszytu zawierającego kod, jest zamykany po zapisaniu jego zawartości.

to samo można również osiągnąć za pomocą innej pętli, jak pokazano poniżej:

Sub CloseWorkbooks()Dim WbCount As IntegerWbCount = Workbooks.CountFor i = WbCount To 1 Step -1If Workbooks(i).Name <> ThisWorkbook.Name ThenWorkbooks(i).Close SaveChanges:=TrueEnd IfNext iEnd Sub

powyższy kod używa pętli For Next do zamknięcia wszystkich skoroszytów z wyjątkiem tego, który zawiera kod. W tym przypadku nie musimy deklarować zmiennej skoroszytu, ale zamiast tego musimy policzyć całkowitą liczbę otwartych skoroszytów. Kiedy mamy liczbę, używamy pętli For Next, aby przejść przez każdy skoroszyt. W tym przypadku używamy również numeru indeksu, aby odnieść się do skoroszytów.

zauważ, że w powyższym kodzie zapętlamy się od WbCount do 1 z krokiem -1. Jest to potrzebne, ponieważ w każdej pętli skoroszyt zostaje zamknięty, a liczba skoroszytów zmniejsza się o 1.

błąd podczas pracy z obiektem skoroszytu (błąd Czasu Pracy '9′)

jednym z najczęstszych błędów, które możesz napotkać podczas pracy z skoroszytami, jest-błąd Czasu Pracy '9′ – Indeks dolny poza zakresem.

obiekt skoroszytu w VBA - Runtime Error 9 Indeks dolny poza zakresem

ogólnie błędy VBA nie są zbyt pouczające i często pozostawiają to tobie, aby dowiedzieć się, co poszło nie tak.

oto niektóre z możliwych przyczyn, które mogą prowadzić do tego błędu:

  • skoroszyt, do którego próbujesz uzyskać dostęp, nie istnieje. Na przykład, jeśli próbuję uzyskać dostęp do piątego skoroszytu za pomocą skoroszytów(5), a otwarte są tylko skoroszyty 4, otrzymam ten błąd.
  • Jeśli używasz niewłaściwej nazwy, aby odnieść się do skoroszytu. Na przykład, jeśli nazwa skoroszytu to przykłady.xlsx i używasz przykładu.xlsx. wtedy pokaże ci ten błąd.
  • Jeśli nie zapisałeś skoroszytu i używasz rozszerzenia, pojawia się ten błąd. Na przykład, jeśli nazwa skoroszytu to Book1 i używasz nazwy Book1.xlsx bez zapisywania go, pojawi się ten błąd.
  • skoroszyt, do którego próbujesz uzyskać dostęp, jest zamknięty.

Pobierz listę wszystkich otwartych skoroszytów

Jeśli chcesz uzyskać listę wszystkich otwartych skoroszytów w bieżącym skoroszycie (skoroszyt, w którym uruchamiasz Kod), możesz użyć poniższego kodu:

Sub GetWorkbookNames()Dim wbcount As Integerwbcount = Workbooks.CountThisWorkbook.Worksheets.AddActiveSheet.Range("A1").ActivateFor i = 1 To wbcountRange("A1").Offset(i - 1, 0).Value = Workbooks(i).NameNext iEnd Sub

powyższy kod dodaje nowy arkusz roboczy, a następnie wymienia nazwy wszystkich otwartych skoroszytów.

Jeśli chcesz również uzyskać ich ścieżkę do pliku, możesz użyć poniższego kodu:

Sub GetWorkbookNames()Dim wbcount As Integerwbcount = Workbooks.CountThisWorkbook.Worksheets.AddActiveSheet.Range("A1").ActivateFor i = 1 To wbcountRange("A1").Offset(i - 1, 0).Value = Workbooks(i).Path & "\" & Workbooks(i).NameNext iEnd Sub

Otwórz określony skoroszyt, klikając dwukrotnie komórkę

Jeśli masz listę ścieżek plików dla skoroszytów programu Excel, możesz użyć poniższego kodu, aby po prostu dwukrotnie kliknąć komórkę ze ścieżką pliku, a otworzy ona Ten skoroszyt.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)Workbooks.Open Target.ValueEnd Sub

ten kod zostanie umieszczony w oknie kodu ThisWorkbook.

aby to zrobić:

  • Kliknij dwukrotnie obiekt ThisWorkbook w Eksploratorze projektu. Zauważ, że obiekt ThisWorkbook powinien znajdować się w skoroszycie, w którym chcesz tę funkcjonalność.
  • skopiuj i wklej powyższy kod.

teraz, jeśli masz dokładną ścieżkę plików, które chcesz otworzyć, możesz to zrobić, klikając dwukrotnie ścieżkę pliku, a VBA natychmiast otworzy ten skoroszyt.

gdzie umieścić kod VBA

zastanawiasz się, gdzie znajduje się kod VBA w skoroszycie programu Excel?

Excel ma backend VBA o nazwie edytor VBA. Musisz skopiować i wkleić kod do okna kodu modułu VB Editor.

oto kroki, aby to zrobić:

  1. przejdź do karty dewelopera.korzystanie ze skoroszytów w Excel VBA - Karta programista na wstążce
  2. kliknij opcję Visual Basic. Spowoduje to otwarcie edytora VB w backendzie.kliknij Visual Basic
  3. w okienku Project Explorer w edytorze VB kliknij prawym przyciskiem myszy dowolny obiekt skoroszytu, w którym chcesz wstawić kod. Jeśli nie widzisz Eksploratora projektu, przejdź do karty Widok i kliknij Eksplorator projektu.
  4. przejdź do Wstaw i kliknij moduł. Spowoduje to wstawienie obiektu modułu do skoroszytu.korzystanie ze skoroszytów w programie Excel VBA - wstawianie modułu
  5. skopiuj i wklej kod w oknie modułu.korzystanie ze skoroszytów w programie Excel VBA - wstawianie modułu

Możesz również polubić następujące samouczki Excel VBA:

  • Jak nagrać makro w programie Excel.
  • tworzenie funkcji zdefiniowanej przez Użytkownika w Excelu.
  • Jak utworzyć i używać dodatku w programie Excel.
  • Jak przywrócić makra, umieszczając je w osobistym skoroszycie makr.
  • Pobierz listę nazw plików z folderu w programie Excel (z i bez VBA).
  • Jak korzystać z funkcji Excel VBA InStr (z praktycznymi przykładami).
  • jak sortować dane w Excelu za pomocą VBA (przewodnik krok po kroku).