Zmienne, instrukcje warunkowe Rafał Zduńczyk Programowanie arkuszy kalkulacyjnych 2017
Co jest z tym kodem nie tak? Sub Input1() a = InputBox("Pierwsza") b = InputBox("Druga") MsgBox a + b End Sub Wychodzi, że 1 + 2 = 12, zamiast 3.
Co jest z tym kodem nie tak? Sub Input1() a = InputBox("Pierwsza") b = InputBox("Druga") MsgBox a + b End Sub Wychodzi, że 1 + 2 = 12, zamiast 3. A z drugiej strony Sub Input2() a = Sheets("Arkusz2").Range("A1") b = Sheets("Arkusz2").Range("B1") Sheets("Arkusz2").Range("C1") = a + b End Sub działa dobrze! Czy coś jest nie tak z InputBox i Msgbox?
Co jest z tym kodem nie tak? Sub Input1() a = InputBox("Pierwsza") b = InputBox("Druga") MsgBox a + b End Sub Wychodzi, że 1 + 2 = 12, zamiast 3. A z drugiej strony Sub Input2() a = Sheets("Arkusz2").Range("A1") b = Sheets("Arkusz2").Range("B1") Sheets("Arkusz2").Range("C1") = a + b End Sub działa dobrze! Czy coś jest nie tak z InputBox i Msgbox? InputBox dane tekstowe + łączenie tekstów, konkatenacja
Co jest z tym kodem nie tak? Sub Input1() a = InputBox("Pierwsza") b = InputBox("Druga") MsgBox a + b End Sub Wychodzi, że 1 + 2 = 12, zamiast 3. A z drugiej strony Sub Input2() a = Sheets("Arkusz2").Range("A1") b = Sheets("Arkusz2").Range("B1") Sheets("Arkusz2").Range("C1") = a + b End Sub InputBox dane tekstowe + łączenie tekstów, konkatenacja Trzy powody, by deklarować typy zmiennych: 1. To co powyżej 2. Domyślny typ zmiennych o niezadeklarowanym typie: Variant dużo miejsca, czasochłonne 3. Porządek
Deklaracje zmiennych Zmienne można deklarować pojedynczo, albo w grupach Dim a Dim b, c Żeby przypisać zmienną do typu stosuje się składnię Dim a As i po spacji nazwa typu. Typy do wyboru są następujące Typ Rozmiar (bajty) Wartości Boolean 2 True (1)/False (0) Byte 1 0 255 Date 8 od 1.01.100 do 31.12.9999 Currency 8 od ok 9 10 14 do 9 10 14 (+4 miejsca po kropce) Integer 2 od 32 768 do 32 767 Long 4 od ok. 2 10 10 do 2 10 10 Single 4 wymierne ok. ±3 10 38, dokładność do ok. 10 45 Double 8 wymierne ok. ±3 10 308, dokładność do ok. 10 324 String * n n ciągi znaków o długości n (do 65 400 znaków) String 10 + n j.w. do 2 milionów znaków Object 4 odwołanie do dowolnego obiektu Variant 16 jakiekolwiek numeryczne Variant 22 + n jakiekolwiek tekstowe
Stałe Const pi As Single = 3.1415927 Konwersja a = CInt(InputBox...)
Stałe Const pi As Single = 3.1415927 Konwersja a = CInt(InputBox...) Złe nazwy Błędna Trochę lepsza Dobra a,b ab int.salary intsalary 8a a8 Me&You MeAndYou Me You Me_You j intcounter1 d datdate1 m lngminimum a1234 strperson
Instrukcje warunkowe 1. Jedna możliwość: If Sheets("Arkusz2").Range("A1") = 1 Then MsgBox "Jeden"
Instrukcje warunkowe 1. Jedna możliwość: If Sheets("Arkusz2").Range("A1") = 1 Then MsgBox "Jeden" a = Sheets("Arkusz2").Range("A1") If a = True Then MsgBox "Prawda": Sheets("Arkusz2").Range("A2") = 7
Instrukcje warunkowe 1. Jedna możliwość: If Sheets("Arkusz2").Range("A1") = 1 Then MsgBox "Jeden" a = Sheets("Arkusz2").Range("A1") If a = True Then MsgBox "Prawda": Sheets("Arkusz2").Range("A2") = 7 If a = True Then MsgBox "Prawda" Sheets("Arkusz2").Range("A2") = 7 End If
Instrukcje warunkowe 1. Jedna możliwość: If Sheets("Arkusz2").Range("A1") = 1 Then MsgBox "Jeden" a = Sheets("Arkusz2").Range("A1") If a = True Then MsgBox "Prawda": Sheets("Arkusz2").Range("A2") = 7 If a = True Then MsgBox "Prawda" Sheets("Arkusz2").Range("A2") = 7 End If 2. Dwie opcje: If Sheets("Arkusz2").Range("A1") = True Then MsgBox "Prawda" Else MsgBox "Fałsz" End If
Instrukcje warunkowe 1. Jedna możliwość: If Sheets("Arkusz2").Range("A1") = 1 Then MsgBox "Jeden" a = Sheets("Arkusz2").Range("A1") If a = True Then MsgBox "Prawda": Sheets("Arkusz2").Range("A2") = 7 If a = True Then MsgBox "Prawda" Sheets("Arkusz2").Range("A2") = 7 End If 2. Dwie opcje: If Sheets("Arkusz2").Range("A1") = True Then MsgBox "Prawda" Else MsgBox "Fałsz" End If If a = True Or a = 1 Then MsgBox "Prawda"
Instrukcje warunkowe 3. Więcej niż dwie opcje: If a = True Then MsgBox "Prawda" ElseIf a = False Then MsgBox "Fałsz" Else MsgBox "Nie wiem" End If
Instrukcje warunkowe 3. Więcej niż dwie opcje: If a = True Then MsgBox "Prawda" ElseIf a = False Then MsgBox "Fałsz" Else MsgBox "Nie wiem" End If If a = True Then MsgBox "Prawda" ElseIf a = False MsgBox "Fałsz" End If
Instrukcje warunkowe 3. Więcej niż dwie opcje: If a = True Then MsgBox "Prawda" ElseIf a = False Then MsgBox "Fałsz" Else MsgBox "Nie wiem" End If If a = True Then MsgBox "Prawda" ElseIf a = False MsgBox "Fałsz" End If Select Case a Case Is < 0 MsgBox "Liczba ujemna" Case 0 MsgBox a Case 1.5 To 3 MsgBox "Między 1,5 oraz 3" Case 4, 6, 8, 10 MsgBox "Parzyste" Case "Nic" MsgBox "Tekst" Case Else MsgBox "Coś innego" End Select
Instrukcje warunkowe 3. Więcej niż dwie opcje: If a = True Then MsgBox "Prawda" ElseIf a = False Then MsgBox "Fałsz" Else MsgBox "Nie wiem" End If If a = True Then MsgBox "Prawda" ElseIf a = False MsgBox "Fałsz" End If Select Case a Case Is < 0 MsgBox "Liczba ujemna" Case 0 MsgBox a Case 1.5 To 3 MsgBox "Między 1,5 oraz 3" Case 4, 6, 8, 10 MsgBox "Parzyste" Case "Nic" MsgBox "Tekst" Case Else MsgBox "Coś innego" End Select Pamiętaj! W długich instrukcjach można łamać linie za pomocą podkreślnika po spacji: If (s >0 And s < 1) Or (s > 2 And s < 3) Or (s > 4 And s < 5) Or _ (s >7 And s < 8) Then
Instrukcje warunkowe 3. Więcej niż dwie opcje: If a = True Then MsgBox "Prawda" ElseIf a = False Then MsgBox "Fałsz" Else MsgBox "Nie wiem" End If If a = True Then MsgBox "Prawda" ElseIf a = False MsgBox "Fałsz" End If Select Case a Case Is < 0 MsgBox "Liczba ujemna" Case 0 MsgBox a Case 1.5 To 3 MsgBox "Między 1,5 oraz 3" Case 4, 6, 8, 10 MsgBox "Parzyste" Case "Nic" MsgBox "Tekst" Case Else MsgBox "Coś innego" End Select Pamiętaj! W długich instrukcjach można łamać linie za pomocą podkreślnika po spacji: If (s >0 And s < 1) Or (s > 2 And s < 3) Or (s > 4 And s < 5) Or _ (s >7 And s < 8) Then
InputBox IputBox to funkcja, która ma wymagany argument: podpowiedź oraz kilka argumentów opcjonalnych: 2. tytuł pojawi się na pasku u góry 3. wartość domyślna pojawi się w okienku w miejscu wprowadzania danych 4. położenie w poziomie domyślnie: wyśrodkowane 5. położenie w pionie domyślnie: wyśrodkowane
InputBox IputBox to funkcja, która ma wymagany argument: podpowiedź oraz kilka argumentów opcjonalnych: 2. tytuł pojawi się na pasku u góry 3. wartość domyślna pojawi się w okienku w miejscu wprowadzania danych 4. położenie w poziomie domyślnie: wyśrodkowane 5. położenie w pionie domyślnie: wyśrodkowane a = InputBox("Podaj imię", "Wprowadzanie danych", "Hania", 5000, 500)
InputBox IputBox to funkcja, która ma wymagany argument: podpowiedź oraz kilka argumentów opcjonalnych: 2. tytuł pojawi się na pasku u góry 3. wartość domyślna pojawi się w okienku w miejscu wprowadzania danych 4. położenie w poziomie domyślnie: wyśrodkowane 5. położenie w pionie domyślnie: wyśrodkowane a = InputBox("Podaj imię", "Wprowadzanie danych", "Hania", 5000, 500)
InputBox IputBox to funkcja, która ma wymagany argument: podpowiedź oraz kilka argumentów opcjonalnych: 2. tytuł pojawi się na pasku u góry 3. wartość domyślna pojawi się w okienku w miejscu wprowadzania danych 4. położenie w poziomie domyślnie: wyśrodkowane 5. położenie w pionie domyślnie: wyśrodkowane a = InputBox("Podaj imię", "Wprowadzanie danych", "Hania", 5000, 500)
InputBox IputBox to funkcja, która ma wymagany argument: podpowiedź oraz kilka argumentów opcjonalnych: 2. tytuł pojawi się na pasku u góry 3. wartość domyślna pojawi się w okienku w miejscu wprowadzania danych 4. położenie w poziomie domyślnie: wyśrodkowane 5. położenie w pionie domyślnie: wyśrodkowane a = InputBox("Podaj imię", "Wprowadzanie danych", "Hania", 5000, 500) InputBox wartości tekst wpisany przez użytkownika domyślny ciąg znaków w przypadku, kiedy się nic nie wpisze pusty ciąg, kiedy się wciśnie Cancel (lub gdy nie ma domyślnego tekstu i nic się nie wpisze)
InputBox łamanie linii W podpowiedzi można łamać linię za pomocą komend Nazwa Kod Znaczenie vblf Chr(10) Line Feed wypełnienie linii vbcr Chr(13) Carriage Return powrót karetki vbcrlf Chr(13)+Chr(10) vbnewline to samo vbverticaltab Chr(11) Ręczne łamanie linii, jak Shift + Enter
InputBox łamanie linii W podpowiedzi można łamać linię za pomocą komend Nazwa Kod Znaczenie vblf Chr(10) Line Feed wypełnienie linii vbcr Chr(13) Carriage Return powrót karetki vbcrlf Chr(13)+Chr(10) vbnewline to samo vbverticaltab Chr(11) Ręczne łamanie linii, jak Shift + Enter Przykład: a = InputBox("Pierwsza linia" & Chr(10) & "Druga" & Chr(13) & "Trzecia"
InputBox łamanie linii W podpowiedzi można łamać linię za pomocą komend Nazwa Kod Znaczenie vblf Chr(10) Line Feed wypełnienie linii vbcr Chr(13) Carriage Return powrót karetki vbcrlf Chr(13)+Chr(10) vbnewline to samo vbverticaltab Chr(11) Ręczne łamanie linii, jak Shift + Enter Przykład: a = InputBox("Pierwsza linia" & Chr(10) & "Druga" & Chr(13) & "Trzecia" W nagłówku nie daje się łamać linii
InputBox łamanie linii W podpowiedzi można łamać linię za pomocą komend Nazwa Kod Znaczenie vblf Chr(10) Line Feed wypełnienie linii vbcr Chr(13) Carriage Return powrót karetki vbcrlf Chr(13)+Chr(10) vbnewline to samo vbverticaltab Chr(11) Ręczne łamanie linii, jak Shift + Enter A oto inne przydatne wartości Chr: Chr(32) spacja Chr(34) górny cudzysłów (np. do wyświetlenia w MsgBox) Chr(38) znak &, ampersand Chr(42) gwiazdka Chr(43) plus Chr(95) podkreślnik
InputBox częste błędy początkujących Sub input_zle() If InputBox("Podaj imię") = "Hania" Then MsgBox "Dzień dobry, Haniu" ElseIf InputBox("Podaj imię") = "Janusz" Then MsgBox "Dzień dobry, Januszu" End If End Sub
InputBox częste błędy początkujących Sub input_zle() If InputBox("Podaj imię") = "Hania" Then MsgBox "Dzień dobry, Haniu" ElseIf InputBox("Podaj imię") = "Janusz" Then MsgBox "Dzień dobry, Januszu" End If End Sub Zagadka: Czemu trzeba Janusz wpisywać dwa razy?
MsgBox Ta funkcja, choć na pozór tylko wyświetla komunikaty, daje całkiem spore możliwości. Można kontrolować następujące opcje Tekst komunikatu Tytuł Przyciski Domyślnie wybrany przycisk Ikony Zachowanie wobec innych aplikacji (modalność) Wyrównywanie tekstu Składnia MsgBox(Komunikat,opcje,Tytuł) Lub, jeśli sam komunikat, bez dalszej interaktywności: MsgBox komunikat
MsgBox opcje Można http://dzono4.w.interiowo.pl/kurs/okkom.htm
MsgBox opcje Można http://dzono4.w.interiowo.pl/kurs/okkom.htm samemu obliczyć odpowiednią sumę: b = MsgBox("",290) przyciski: przerwij, ponów, ignoruj (2), pytanie (32), domyślny drugi przycisk (256),
MsgBox opcje Można http://dzono4.w.interiowo.pl/kurs/okkom.htm samemu obliczyć odpowiednią sumę: b = MsgBox("",290) przyciski: przerwij, ponów, ignoruj (2), pytanie (32), domyślny drugi przycisk (256), zostawić jako sumę: b = MsgBox("",2 + 32 + 256)
MsgBox opcje Można samemu obliczyć odpowiednią sumę: b = MsgBox("",290) przyciski: przerwij, ponów, ignoruj (2), pytanie (32), domyślny drugi przycisk (256), zostawić jako sumę: b = MsgBox("",2 + 32 + 256) użyć nazw: b = MsgBox("", vbabortretryignore + vbdefaultbutton2 + vbquestion)
MsgBox opcje Można samemu obliczyć odpowiednią sumę: b = MsgBox("",290) przyciski: przerwij, ponów, ignoruj (2), pytanie (32), domyślny drugi przycisk (256), zostawić jako sumę: b = MsgBox("",2 + 32 + 256) użyć nazw: b = MsgBox("", vbabortretryignore + vbdefaultbutton2 + vbquestion) Modalność (4096): blokuje działanie wszystkich aplikacji do czasu wyboru opcji z tego MsgBoksa. W przeciwnym wypadku tylko Excel zablokowany.
MsgBox opcje Można samemu obliczyć odpowiednią sumę: b = MsgBox("",290) przyciski: przerwij, ponów, ignoruj (2), pytanie (32), domyślny drugi przycisk (256), zostawić jako sumę: b = MsgBox("",2 + 32 + 256) użyć nazw: b = MsgBox("", vbabortretryignore + vbdefaultbutton2 + vbquestion) Modalność (4096): blokuje działanie wszystkich aplikacji do czasu wyboru opcji z tego MsgBoksa. W przeciwnym wypadku tylko Excel zablokowany. Wartości MsgBox 1. OK 2. Cancel 4. Ponów 5. Ignoruj 6. Tak 3. Przerwij 7. Nie
MsgBox opcje Można samemu obliczyć odpowiednią sumę: b = MsgBox("",290) przyciski: przerwij, ponów, ignoruj (2), pytanie (32), domyślny drugi przycisk (256), zostawić jako sumę: b = MsgBox("",2 + 32 + 256) użyć nazw: b = MsgBox("", vbabortretryignore + vbdefaultbutton2 + vbquestion) Modalność (4096): blokuje działanie wszystkich aplikacji do czasu wyboru opcji z tego MsgBoksa. W przeciwnym wypadku tylko Excel zablokowany. Wartości MsgBox 1. OK 2. Cancel lub wciśnięcie Escape, o ile Cancel wyświetlony 3. Przerwij 4. Ponów 5. Ignoruj 6. Tak 7. Nie