This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
vba:functions:increment [26.11.2014 11:33:31] yaslaw |
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 ===== | ||
Line 20: | Line 22: | ||
Ich nehme 2 mal dieselbe Funktion. Es wird i jeweils um 1 hochgezählt. Das Quadrat davon muss < als 30 sein. | 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 das kommen - ergo muss laufend hochgezählt werden und der Ausgabearray vergrössert werden. | + | 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 | Ohne Incement-Funktion sieht meine Lösung so aus | ||
<code vb> | <code vb> | ||
- | Public Sub withoutIncrement() | + | Public Sub withoutPreIncrement() |
Dim i As Integer | Dim i As Integer | ||
Dim arr() As Integer | Dim arr() As Integer | ||
Line 39: | Line 43: | ||
</code> | </code> | ||
- | Mit iE() vereinfacht sich das ganze | + | Mit inc() oder preInc() vereinfacht sich das ganze |
<code vb> | <code vb> | ||
- | Public Sub withIncrement() | + | Public Sub withPreIncrement() |
Dim i As Integer | Dim i As Integer | ||
Dim arr() As Integer | Dim arr() As Integer | ||
Line 55: | Line 59: | ||
</code> | </code> | ||
- | Achja, beide haben natürlch dieselbe Ausgabe: | + | ==== 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()> ( | <code><Integer()> ( | ||
[0] => <Integer> 0 | [0] => <Integer> 0 | ||
Line 64: | Line 103: | ||
[5] => <Integer> 25 | [5] => <Integer> 25 | ||
)</code> | )</code> | ||
- | ==== | + | ===== Code ===== |
- | = Code ===== | + | |
<source '%%fpath%%/%%fname%%' vb> | <source '%%fpath%%/%%fname%%' vb> | ||