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:46:19]
yaslaw
vba:functions:increment [11.01.2016 12:06:32] (current)
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> <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 ===== ===== Code =====
 <source '​%%fpath%%/​%%fname%%'​ vb> <source '​%%fpath%%/​%%fname%%'​ vb>
  
vba/functions/increment.1416995179.txt.gz · Last modified: 26.11.2014 10:46:19 by yaslaw