Makro mehrfach ablaufen lassen

Hallo Ihr Lieben,

ich moechte, zur Berechnung des Zinseszins in einer Tabelle, ein Makro 11-mal wiederholen lassen, bin aber leider nicht in der Lage, es zu stoppen. Kann mir da jemand helfen? Hier das Makro:

Sub Zinseszins()

’ Zinseszins Macro
Selection.Copy
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, Placement:= _
wdFloatOverText, DisplayAsIcon:=False
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)*0,07/12", NumberFormat:= _
„#.##0,00“
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)", NumberFormat:="#.##0,00"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
’ Application.Run MacroName:=„Zinseszins“
End Sub

ich moechte, zur Berechnung des Zinseszins in einer Tabelle,
ein Makro 11-mal wiederholen lassen, bin aber leider nicht in
der Lage, es zu stoppen. Kann mir da jemand helfen? Hier das
Makro:

Hallo Hudot,

fünf mal Selection.MoveRight Unit:=wdCell kannste so schreiben:
Selection.MoveRight Unit:=wdCell, Count:=5

Deine ZZ-Berechnung verstehe ich nicht ganz.
Nehmen wir mal an deine erste Zeile in der Tabelle sieht so aus:

A1 B1 C1 D1 E1 F1 G1 H1 I1 J1
 1 2 3 4 5 6

A1 selektierst/markierst du und läßt den Code laufen, dann sieht das
so aus:

A1 B1 C1 D1 E1 F1 G1 H1 I1 J1
 1 2 3 4 5 1 0,09 16,09 

Formeln:

In F1 steht der Wert von A1
G1: =SUM(LEFT)\*0,07/12 also: ,07/12\*(A1+B1+C1+D1+E1)
H1: =SUM(LEFT) also: A1+B1+C1+D1+E1+F1+G1 

H1 ist selektiert, Wie/wo soll es jetzt weitergehen?
Lade mal eine Beispieldoc hoch mit oberstem Link in FAQ:2606
wo du für 3-4 makrodurchläufe manuell einträgst was das makro tun soll

Gruß
Reinhard

Hallo Reinhard,

zunaechst einmal: VIELEN DANK fuer Deine Antwort!! Ich bin wirklich baff, wie sehr Du Dich in WWW engagierst. Respekt!

Zu meinem Anliegen:
Im Prinzip hast Du wirklich Alles verstanden …

Zu Beginn wird eine vorbereitete Tabelle (in der Regel 13 Zeilen), die in den Spalten A-E (ab 2. Zeile) bereits Werte enthaelt, an der Stelle (Dein Beispiel: H1) ein Basiswert eingesetzt. Dieser Wert wird kopiert und in der folgenden Zeile wieder (in Deinem Beispiel waere das die Zelle F2 - auch wenn das mit Unit:=wdCell, Count:=5 jetzt nicht hinhaut)eingesetzt.In G2 wird nun das Produkt von((A2:F2)*0,07/12)gebildet und in H2 schliesslich die Summe aus (A2:G2) ausgewiesen. H2 wird nun wieder kopiert, in F3 eingesetzt … Das geht nun so weiter, bis ??? Ja, da kommt mein Problem, ich wuerde der Kiste jeweils gerne sagen: „Lass diese Schleife x-mal durchlaufen“, weiss aber nicht wie. Ich hab’s mit „…Loop…“ probiert, leider ohne Erfolg.
Wenn ich das also richtig sehe, muesste der folgende Code (weitere) 11-mal durchlaufen werden:

Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Copy
Selection.MoveRight Unit:=wdCell, Count:=5
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, Placement:= _
wdFloatOverText, DisplayAsIcon:=False
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)*0,07/12", NumberFormat:= _
„#.##0,00“
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)", NumberFormat:="#.##0,00"

Danke fuer Deine Muehe und liebe Gruesse!

hudot

Hallo Hudot,

zunaechst einmal: VIELEN DANK fuer Deine Antwort!! Ich bin
wirklich baff, wie sehr Du Dich in WWW engagierst. Respekt!

dankeschön Hudot.

Im Prinzip hast Du wirklich Alles verstanden …

Naja, nobh bin ich da skeptisch aber zugegeben, deinen neuen Beitrag
habe ich eben erst gelesen und die Details die du beschreibst schaue
ich mir morgen äh heute an, jetzt nicht mehr.

Wenn ich das also richtig sehe, muesste der folgende Code
(weitere) 11-mal durchlaufen werden:

? also 12 mal? Aber egal, kannste ja im Code abändern wie oft.
Und Loop oder While müßte auch funktionieren.

diese Schleife x-mal durchlaufen", weiss aber nicht wie. Ich
hab’s mit „…Loop…“ probiert, leider ohne Erfolg.

Ich habe es anders gelöst aber es geht wohl mit allen drei „Wegen“.
For Next ginge auch.

Nachstehend die Codes von mir, stammen vom 29-ten nach vielen Tests, bin gar nicht so sicher daß der gezeigte Code perfekt läuft aber das
Prinzip stimmt.

Das Prinzip ist eine globale Variable zu setzen (N) die die Anzahl der
Aufrufe von „ZZ“ mitzählt. Und gleich zu Beginn von ZZ diese Variable
abzuprüfen.

Option Explicit

Public N As Integer

Sub ZZ()
If N = 11 Then Exit Sub
N = N + 1

dein Code

Call ZZ
End Sub

Um meine Codes zu testen mache bitte folgendes. Nimm ein leeres
Dokument. Füge so 2-4 Leerzeilen ein, dann aus den Lecasy-Tools
einen ActiveX CommandButton.

Dann kopiere in das Modul „ThisDocument“ folgenden Code:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Call ErzeugeFuelleTabelle
Call ZZ
Application.ScreenUpdating = True
End Sub

In ein Standardmodul fügste nachstehenden Code ein.
Dann klicke im Dokument auf den Button…
Danach siehst du was dein Code macht wenn er mehrfach aufgerufen wird.

Die Fehlermeldung in A5,
„!Tabellenindex darf nicht Null sein“ kommt wohl daher daß die
Formel Sum(Left) in A5 links davon keine Zellen hat um eine Summe zu
bilden, meine Mutmaßung ohne Ahnung von Word.

Warum da einige Zellen ein Minuszeichen vor den Zahlwerten haben ist
mir ähnlich unklar.

Gruß
Reinhard

Option Explicit

Public N As Integer

Sub ZZ()
If N = 11 Then Exit Sub
Selection.Copy
Selection.MoveRight Unit:=wdCell, Count:=5
Selection.PasteSpecial Link:=False, DataType:=wdPasteText, Placement:= \_
wdFloatOverText, DisplayAsIcon:=False
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)\*0,07/12", NumberFormat:= \_
"#.##0,00"
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)", NumberFormat:="#.##0,00"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
N = N + 1
Call ZZ
End Sub

Sub ErzeugeFuelleTabelle()
Dim T As Table, myRange, Zei As Long, Spa As Long, L As Integer
With ActiveDocument
 For Each T In .Tables
 T.Delete
 Next T
 Set myRange = .Range(Start:=0, End:=0)
 .Tables.Add Range:=myRange, NumRows:=16, NumColumns:= \_
 12, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= \_
 wdAutoFitFixed
 With .Tables(1)
 If .Style "Tabellengitternetz" Then
 .Style = "Tabellengitternetz"
 End If
 .ApplyStyleFirstColumn = True
 .ApplyStyleRowBands = True
 End With
 With .Tables(1)
 For Zei = 1 To .Rows.Count
 For Spa = 1 To .Columns.Count
 .Cell(Zei, Spa).Range.Text = Spa
 .Cell(Zei, Spa).Range.Text = Left(.Cell(Zei, Spa).Range.Text, 1)
 Next Spa
 Next Zei
 L = Len(.Cell(1, 1).Range.Text)
 Selection.MoveRight Unit:=wdCharacter, Count:=L - 2, Extend:=wdExtend
 End With
End With
End Sub

Selection.MoveLeft Unit:=wdCharacter, Count:=1,
Extend:=wdExtend
Selection.Copy
Selection.MoveRight Unit:=wdCell, Count:=5
Selection.PasteSpecial Link:=False, DataType:=wdPasteText,
Placement:= _
wdFloatOverText, DisplayAsIcon:=False
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)*0,07/12",
NumberFormat:= _
„#.##0,00“
Selection.MoveRight Unit:=wdCell
Selection.InsertFormula Formula:="=SUM(LEFT)",
NumberFormat:="#.##0,00"

Danke fuer Deine Muehe und liebe Gruesse!

hudot

Hallo Reinhard,

hab’s ausprobiert und es scheint alles gut zu laufen. Hab noch eine Fehlermeldung, die kriege ich aber wahrscheinlich selbst noch weg.

Fuer heute danke ich noch einmal seeeeeehr herzlich!!!

Hudot

Zu meinem Anliegen:
Im Prinzip hast Du wirklich Alles verstanden …

Hallo Hudot,

verstehe, sehr schonend ausgedrückt, aber das wesentliche nicht
verstanden *lächel*

Ich habe eben deine zweite Erklärung gelesen und ja, nur im Prinzip
verstanden.
Probieren wir es mal anderst.

Erstelle bitte eine Tabelle mit 8 Spalten und 13 Zeilen wenn ich das
richtig gelesen habe. Fülle so aus wie sie halt vorliegt und trage
manuell das ein was später das Makro eintragen soll.
So für 3 Makro-Durchläufe.

Falls aufgrund der vorliegenden Formeln nicht eindeutig erkennbar,
formatiere die beim Start vorhandenen Zellen farblich.

Hochladen mit dem obersten Hochlader in FAQ:2606

Gruß
Reinhard