Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 69729 Skopiuj do schowka Zmienne VBA , deklaracja zmiennych
Autor Wiadomość
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2531 razy
Posty: 8432
Wysłany: 06-01-2021, 01:05   Zmienne VBA , deklaracja zmiennych

Składnia deklarowania zmiennych w VBA z reguły wygląda tak:
Kod:
Option Explicit

Sub Test_1a()
'Deklarujemy tak:
Dim sTxt As String, sName As String, sPath$
Dim dDate As Date

    'lub tak:
Dim i As Long
Dim j As Long

    'lub tak
Dim k&
Dim o&


    Debug.Print TypeName(sTxt)
    Debug.Print TypeName(sName)
    Debug.Print TypeName(sPath)

    Debug.Print TypeName(dDate)

    Debug.Print TypeName(i)
    Debug.Print TypeName(j)
    Debug.Print TypeName(k)
    Debug.Print TypeName(o)

End Sub


Dość często w kodach spotyka się też taki zapis:
Kod:
Option Explicit

Sub Test_1b()
Dim sTxt, sName, sPath As String
Dim dDate
Dim i, j, k, o As Long


    Debug.Print TypeName(sTxt)
    Debug.Print TypeName(sName)
    Debug.Print TypeName(sPath)

    Debug.Print TypeName(dDate)

    Debug.Print TypeName(i)
    Debug.Print TypeName(j)
    Debug.Print TypeName(k)
    Debug.Print TypeName(o)
    Debug.Print TypeName(sTxt)
    Debug.Print TypeName(sName)

End Sub
,który jest zapisem błędnym, bo tylko ostatnie zadeklarowane zmienne otrzymają wskazany typ, a reszta z automatu otrzyma typ Variant.

Teraz ciekawostka - jak dla mnie.
Możemy zapisać w procedurze zmienne w jednej linii , jak powyżej ,a i tak otrzymają one odpowiedni typ, pod warunkiem że na początku modułu wstawimy instrukcję DefType
Przykład
Kod:
Option Explicit

DefStr S
DefDate D
DefLng I-K, O

Sub Test_1c()
Dim sTxt, sName, sPath
Dim dDate
Dim i, j, k, o


    Debug.Print TypeName(sTxt)
    Debug.Print TypeName(sName)
    Debug.Print TypeName(sPath)

    Debug.Print TypeName(dDate)

    Debug.Print TypeName(i)
    Debug.Print TypeName(j)
    Debug.Print TypeName(k)
    Debug.Print TypeName(o)

End Sub


DefType może być użyte do ustawienia typu danych dla tych zmiennych , których nazwy zaczynają się od wybranych znaków.
Nie ma to jednak wpływu na zmienne, które są jawnie zadeklarowane za pomocą instrukcji Dim… As.

Instrukcja DefType obejmuje takie typy:
Kod:
DefBool , DefByte , DefInt , DefLng , DefCur , DefSng , DefDbl , DefDec , DefDate , DefStr , DefObj , DefVar

a składnia wygląda tak:
DefType litera
lub
DefType litera, litera, litera itd
lub możemy wyznaczyć zakres liter
DefType od litery - do litery

To chyba tyle na ten temat.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 397710 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 3142 razy
Posty: 10399
Wysłany: 06-01-2021, 02:08   

Ten sposób deklaracji zmiennych jest chyba tak stary jak VB. Dla mnie istniał "od zawsze", choć nigdy go nie stosowałem. Może przekonałbym się do niego gdyby zamiast jednej litery można było zadeklarować przedrostki 2-3 literowe. Drugim problemem są zmienne globalne. DefType potrafi deklarować tylko na poziomie modułu.

Jednak jeśli ktoś się skusi na używanie tego typu deklaracji polecam zapoznać się z instrukcją obsługi by zbytnio się nie frustrować, szczególnie na początku przygody z "nowym" sposobem deklarowania zmiennych.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 397718 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 328 razy
Posty: 1618
Wysłany: 06-01-2021, 02:57   

Artik napisał/a:
Dla mnie istniał "od zawsze" ...

Na pewno był na początku 90-tych w QBasicu ... :-> :
Kod:
Rem             PRG2222.BAS

DefLng L
DefStr Z
DefInt A-K
Dim cifr(0 To 10)
Dim znk(0 To 10)
CLS
Print "BLEBLEBLEBLE"
Print "BUM TARARA"
Print
INPUT "WPISZTA SE LICZBOCHA";lczb
znlczb = STRS(lczb)
lcifr = Len(LTrim$(znlczb))
For k = 0 To lcifr
znk(k) = Mid$(znk, k + 1, 1)
cifr(lcifr - k) = Val(LTrim$(znk(k)))
Next k

Print
Print "Liczbocha               ="; lczb
      Print
Print "Liczbocha zbudowana jest z"
    For k = 0 To lcifr
      Print znk(k)
    Next k
        Print : Print
Print "Znaki liczby"
    For k = 0 To lcifr - 1
      Print "Znak w poz "; k; " = "; cifr(k)
    Next k
End


I niech 'Let' będzie z waszymi zmiennymi ... ' Let MyStr = "Hello World" '
ID posta: 397719 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe