1. Możliwości VBA w arkuszu Excel
Fajnie, że dotarłeś już do tej części szkolenia VBA Excel. W tym rozdziale omówimy w szczegółach jakie możliwości daje nam VBA w arkuszu danych. Jeśli zastanawiamy się, w jaki sposób napisać program, który wykona za nas określone działania w arkuszu, najprostszą metodą będzie tutaj zarejestrowanie makra. Po zarejestrowaniu możemy zobaczyć kod, który wykona za nas dokładnie te same działania na arkuszu. VBA w Excelu zawiera tysiące różnych możliwych sposobów działania. W tym rozdziale poznamy te, których będziemy często używać. Kod, który będziemy pisać w tym rozdziale powinniśmy wprowadzać do modułu oraz zawrzeć go pomiędzy frazami Sub Nazwa_programu() i End Sub.
2. Podstawowe działania na komórkach arkusza – adresowanie komórek
Jeśli chcemy wykonywać działania na konkretnym arkuszu danych innym, niż ten, na którym się obecnie znajdujemy, aktywujemy go następującym kodem wskazując w cudzysłowie nazwę – w naszym wypadku Arkusz1:
Sheets("Arkusz1").Select
Jeśli chcemy wprowadzić dowolną wartość w komórkę naszego arkusza, powinniśmy najpierw tą komórkę zaadresować. Adresowania dokonujemy przy pomocy polecenia Cells(komórka) lub Range(zakres). Za pomocą polecenia Cells możemy zaadresować dowolną jedną komórkę. Za pomocą polecenia Range adresujemy zarówno pojedynczą komórkę, jak i zakres wielu komórek.
Jesteśmy już w konkretnym arkuszu. By wykonać najprostsze działanie na pojedynczej komórce, korzystamy z przykładu opisanego w rozdziale Pierwszy program:
Range("A1") = "dowolna treść"
Jak wcześniej wspomniałem, do pojedynczej komórki w naszym arkuszu możemy odnieść się także poprzez zastosowanie polecenia Cells określając dany wiersz i kolumnę w sposób liczbowy. Dla przykładu Cells(2, 2) odnosić się będzie do komórki „B2”.
Cells(2, 2) = "dowolna wartość"
Możemy także od razu odnieść się do konkretnej komórki w konkretnym arkuszu. Robimy to łącząc wyżej wymienione kody:
Sheets("Arkusz2").Range("D23") = "Dowolny tekst"
Sheets("Arkusz2").Cells(2, 2) = "Dowolny tekst"
Powyższy przykład wypełnia komórki arkusza danymi. Co jednak, jeśli chcielibyśmy pobrać dane z komórek i np przypisać je do zmiennej? Jeśli mamy już zdefiniowaną zmienną odwracamy powyższe równania:
zmienna = Sheets("Arkusz2").Range("D23").Value
zmienna = Sheets("Arkusz2").Cells(2, 2)
W ten sposób możemy pobrać dane do naszego kodu VBA i wykonać na nich dowolne działania. Potem, jeśli chcemy możemy wstawić wyniki obliczeń do dowolnych komórek.
3. Manipulacja danymi w komórkach – kopiuj, wklej, wytnij, usuń
Jeśli chcemy wykonać podstawowe działania na komórkach Excela, w pierwszej kolejności zaznaczamy nasz zakres. W drugiej kolejności odnosimy się do zaznaczonego zakresu poleceniem Selection oraz wybieramy po kropce jedno z poleceń kopiujące, wycinające, wklejające, bądź usuwające dane z naszego zakresu.
Range("A1:B10").Select Selection.Copy 'polecenie Kopiuj Range("A1:B10").Select Selection.Cut 'polecenie Wytnij Range("A1:B10").Select ActiveSheet.Paste 'polecenie Wklej Range("A1:B10").Select Selection.ClearContents 'polecenie Usuń
4. Zapisywanie plików VBA Excel
Jeśli chcemy zapisać nasz plik Excela za pomocą kodu VBA, najprostszym sposobem będzie odniesienie się do aktywnego skoroszytu oraz zapisanie go w następujący sposób przy wykorzystaniu polecenia Save:
ActiveWorkbook.Save
Jeśli natomiast chcemy zapisać nasz plik w innej, konkretnej lokalizacji wykorzystujemy do tego polecenie SaveAs oraz wpisujemy ścieżkę dla zapisania pliku.
Kod do zapisania pliku w formacie xlsx, a więc Skoroszyt programu Excel:
ActiveWorkbook.SaveAs Filename:="[ścieżka np C:\NAZWA_PLIKU].xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Kod do zapisania pliku w formacie xlsm, a więc Skoroszyt programu Excel z obsługą makr:
ActiveWorkbook.SaveAs Filename:="[ścieżka np C:\NAZWA_PLIKU].xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
4. Zadania (Rozwiązanie możesz wpisać w komentarzu)
4.1 Napisz program wprowadzający w dowolne komórki Arkusza1 Twoje imię oraz miasto zamieszkania.
4.2 Usprawnij powyższy program – skopiuj i wklej wprowadzone dane do Arkusza2.
4.3 Usprawnij swój program dodając kod zapisujący plik Excela w wybranej przez Ciebie lokalizacji.
14 komentarzy “Podstawowe działania w arkuszu Excela VBA”
Sub Program()
Cells(1, 1) = „xxx”
Cells(2, 1) = „yyy”
Range(„a3”) = „zzz”
End Sub
Sub praca_domowa()
Sheets(„Arkusz1”).Range(„A1”) = „imię”
Sheets(„Arkusz1”).Range(„A2”) = „nazwisko”
Sheets(„Arkusz1”).Range(„A3”) = „miejsce zamieszkania”
Sheets(„Arkusz1”).Range(„A1:A3”).Select
Selection.Copy
Sheets(„Arkusz5”).Select
Range(„A1”).Select
ActiveSheet.Paste
End Sub
Mam pytanie odnośnie kopiowania danych do innego arkusza. Napisałem poprawny kod ale zauważyłem ze przy kolejnym użyciu makra pojawia się błąd:
„run-time error’104′: Metoda Select z klasy Range nie powiodła się”
Zauważyłem ze jak wejdę do arkusza z którego pobiera dane i nacisnę ESC czyli odhaczy mi zaznaczenie które pojawia się po użyciu makra to mogę wtedy znowu makro uruchomić.
Makro uruchamiam z pozycji panelu VBA. Jak zatrzymuje makro tzn resetuje kwadracikiem i uruchamiam na nowo to pojawia ww. błąd a jak wcisne przycisk pauzy to i uruchomię to nie ma błędu.
Podrzuć kod, zaraz znajdziemy jakieś rozwiązanie
Sub Zadania()
Sheets(1).Cells(1, 1) = „Imię”
Sheets(1).Cells(2, 1) = „Nazwisko”
Sheets(1).Cells(3, 1) = „Miasto”
Sheets(1).Range(„a1:a3”).Select
Selection.Copy
Sheets(4).Select
Range(„a1:a3”).Select
ActiveSheet.Paste
End Sub
Grzegorzu,
„Sheets(1)” to nie to samo co „Sheets(„1″)”. „Sheets(„1″)” oznacza arkusz o nazwie „1”, natomiast „Sheets(1)” oznacza pierwszy z lewej arkusz (jest to numer kolejny arkusza, patrząc od lewej), bez względu jak on się nazywa. Tak mi wychodzi z testów.
Sub imie_miasto()
Worksheets(„arkusz1”).Range(„A1”) = „Jakub”
Worksheets(„Arkusz1”).Cells(2, 1) = „Kalisz”
Worksheets(„arkusz1”).Select
Range(„A1:A2”).Select
Selection.Copy
Worksheets(„Arkusz2”).Select
Range(„B1:B2″).Select
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=”C:\Users\PLPiotroJa1\Desktop\makra.xlsm”, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Mój kod nie działa , błąd „9”:
Sub praca_domowa()
Sheets(“Arkusz1”).Range(“A1”) = “Natalia”
Sheets(“Arkusz1”).Range(“A1”).Select
Selection.Copy
Sheets(“Arkusz2”).Select
Range(“A1”).Select
ActiveSheet.Paste
End Sub
cześć, najprawdopodobniej nie masz arkusza 2 w skoroszycie
Dodałam arkusz 2 ale ten błąd nadal występuje (szczerze to myslałam że skoro jest polecenie by skopiowac to do innego arkusza to on się utworzy sam ze skopiowanymi danymi;) )
Natalio,
Sprawdź proszę czy Twoje arkusze nie nazywają się przypadkiem inaczej, tak jak u mnie : „Sheet1”, „Sheet2” itd.
Przerobiłem Twój kod na te wartości i u mnie śmiga 🙂
Sub praca_domowa()
Sheets(„Sheet1”).Range(„A1”) = „Natalia”
Sheets(„Sheet1”).Range(„A1”).Select
Selection.Copy
Sheets(„Sheet2”).Select
Range(„A1”).Select
ActiveSheet.Paste
End Sub
Sub Praca_domowa()
Sheets(„Arkusz3”).Range(„A1”) = „Ula”
Sheets(„Arkusz3”).Range(„A2”) = „Kot”
Sheets(„Arkusz3”).select
Range(„A1:A2”).Select
Selection.Copy
Sheets(„Arkusz4”).Select
Range(„A1:A2″).Select
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=”D:\ukotowska\Desktop\pracadomowa.xlsm”,
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Sub Zadaniedomowe()
Sheets(„Arkusz1”).Range(„A1”) = „Ania”
Sheets(„Arkusz1”).Range(„A2”) = „Kowal”
Sheets(„Arkusz1”).Range(„A3”) = „ul. Polskiej”
Sheets(„arkusz1”).Cells(4, 1) = „Kraków”
Sheets(„arkusz1”).Select
Range(„A1:A4”).Select
Selection.Copy
Sheets(„Arkusz2”).Select
Range(„A1:A4″).Select
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=”D:\Zadanie2.xlsm”, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Option Explicit
Sub zadanie_operacje()
Range(„A1”) = „Grzegorz”
Range(„A2”) = „Brzęczyszczykiewicz”
Range(„A3”) = „Pcim”
Range(„A1:A3″).Select
Selection.Copy
Sheets.Add After:=Arkusz1
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:=”D:\zadanie3.xlsm”, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub