User Tools

Site Tools


vba:functions:increment

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:functions:increment [26.11.2014 10:45:42]
yaslaw [[VBA] Increment/Decrement (i++ etc)]
vba:functions:increment [11.01.2016 12:06:32]
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
-    version=1.0.0 +    version=1.1.0 
-    vdate=26.10.2014+    vdate=11.01.2016
     fname=lib_increment.bas     fname=lib_increment.bas
     ns=%NAMESPACE%     ns=%NAMESPACE%
Line 8: Line 8:
  
 ====== [VBA] Increment/​Decrement (i++ etc) ====== ====== [VBA] Increment/​Decrement (i++ etc) ======
-==Version ​%%version%% - %%vdate%%==+//Simuliert ein %%i++ oder ++i%% für VBA.//
  
 +==Version %%version%% - %%vdate%%==
 {{%%fname%%|Download %%fname%% (V-%%version%%)}} {{%%fname%%|Download %%fname%% (V-%%version%%)}}
  
-In vielen Sprachen kennt man %%PostIncrement und PreIncrement%%. Also ++i und i++. +In vielen Sprachen kennt man %%PostIncrement%% und %%PreIncrement%%. Also ''​%%++%%i'' ​und ''​i%%++%%''​
-Leider kennt VBA das nicht. Somit muss bei einer Manuellen Schleife dies immer cvon hand mittels i = i+1 durchgeführt werden.+Leider kennt VBA das nicht. Somit muss bei einer Manuellen Schleife dies immer von Hand mittels ​''​i = i+1'' ​durchgeführt werden.
 \\ Mit den folgenden Funktionen kann amn das umgehen. \\ Mit den folgenden Funktionen kann amn das umgehen.
  
-==== + 
-= Beispiele =====+===== Beispiele ===== 
 +> Für die Ausgabe der Resultate verwendete ich die Funktion [[:​vba:​functions:​print_r:​]]. 
 + 
 +Ich nehme 2 mal dieselbe Funktion. Es wird i jeweils um 1 hochgezählt. Das Quadrat davon muss < als 30 sein. 
 +Somit wissen wir am Anfang noch nicht wieviele Einträge da kommen - ergo muss laufend hochgezählt werden und der Ausgabearray vergrössert werden. 
 + 
 +==== PreIncrement ++i ==== 
 + 
 +Ohne Incement-Funktion sieht meine Lösung so aus 
 +<code vb> 
 +Public Sub withoutPreIncrement() 
 +    Dim i       As Integer 
 +    Dim arr()   As Integer 
 +     
 +    i = -1 
 +    Do While (i + 1) ^ 2 < 30 
 +        i = i + 1 
 +        ReDim Preserve arr(i) 
 +        arr(i) = i ^ 2 
 +    Loop 
 + 
 +    print_r arr 
 +End Sub 
 +</​code>​ 
 + 
 +Mit inc() oder preInc() vereinfacht sich das ganze 
 +<code vb> 
 +Public Sub withPreIncrement() 
 +    Dim i       As Integer 
 +    Dim arr()   As Integer 
 +     
 +    i = -1 
 +    Do While inc(i) ^ 2 < 30 
 +        ReDim Preserve arr(i) 
 +        arr(i) = i ^ 2 
 +    Loop 
 + 
 +    print_r arr 
 +End Sub 
 +</​code>​ 
 + 
 +==== PostIncrement i++ ==== 
 +Umsetzung ohne meine Funktion 
 +<code vb> 
 +Public Sub withoutPostIncrement() 
 +    Dim i       As Integer 
 +    Dim arr()   As Integer 
 +     
 +    Do While (i) ^ 2 < 30 
 +        ReDim Preserve arr(i) 
 +        arr(i) = i ^ 2 
 +        i = i + 1 
 +    Loop 
 + 
 +    print_r arr 
 +End Sub 
 +</​code>​ 
 + 
 +umsetzung mit postInc() oder inc(#,​itPostIncrement) 
 +<code vb> 
 +Public Sub withPostIncrement() 
 +    Dim i       As Integer 
 +    Dim arr()   As Integer 
 +     
 +    Do While i ^ 2 < 30 
 +        ReDim Preserve arr(i) 
 +        'Die Formel wird zuerst ausgeführt. Dann erst kommt der Teil vor dem = 
 +        'Darum ist postInc() vor dem = 
 +        arr(postInc(i)) = i ^ 2 
 +    Loop 
 + 
 +    print_r arr 
 +End Sub 
 +</​code>​ 
 + 
 +==== Resultat ==== 
 +Achja, alle Test haben natürlich dieselbe Ausgabe: 
 +<​code><​Integer()> ​ ( 
 +    [0] => <​Integer>​ 0 
 +    [1] => <​Integer>​ 1 
 +    [2] => <​Integer>​ 4 
 +    [3] => <​Integer>​ 9 
 +    [4] => <​Integer>​ 16 
 +    [5] => <​Integer>​ 25 
 +)</​code>​ 
 +===== Code ===== 
 +<source '​%%fpath%%/​%%fname%%'​ vb>
  
vba/functions/increment.txt · Last modified: 11.01.2016 12:06:32 by yaslaw