Seite 1 von 1
Zähler für bestimmt Fälle - bei ausführen eines Makros
Verfasst: Mi, 18.04.2007 13:16
von Simon23
Hallo,
ich möchte gerne folgendes Erreichen:
Ich habe 8 Verschiedene Parameter, die ich per Makro varieren möchte, jedesmal wenn die Berechnungen in einem bestimmten Wertebereich liegen (z.B. negativ) , dann soll in einem Feld zu dem alten Wert 1 addiert werden (eine Art Zähler Funktion).
So könnte ich bei 1000 Durchläufen sehen, wie oft das Ergnis negativ ist.
Nur wie realisiere ich diesen Zähler?
Gruß
Simon
Verfasst: Mi, 18.04.2007 13:28
von Toxitom
Hey Simon,
es wäre besser, dein Vorhaben genauer zu beschreiben und Beispiele zu geben.
Wenn ich das richtig verstehe, dann wäre die Struktur der Lösung so:
Code: Alles auswählen
sub Hauptprogramm
dim p1,p2,p3,p4,p5,p6,p7 Deine sieben unveränderten Parameter
dim p8 'dein veränderlicher Parameter
REM jetzt Werte zuweisen
p1 = 4 : p2 = 5 : P3 = 7 ...
p8 = 1
REM deine Schleife
for i = 0 to 1000
Erg = rechnen(p1,p2,p3,p4,p5,p6,p7,p8)
if erg <0 then
p8 = p8 +1 'Parameter um eins erhöhen, wenn erg. negativ
end if
REM ändern der sonstigen Parameter
p1 = p1 + i
p2 = p2 - i
....
next
msgbox erg
end sub
REM deine Rechenfunktion
function rechnen(z1, z2, z3, z4, z5, z6, z7, z8)
REM hier jetzt deine Rechenoperation
rechnen = (z1+z2)/z3 * z5 + z6 ...
end function
Je nach Komplexität der Rechenoperationen kannst du das natürlich auch gleich direkt in der For-Schleife unterbingen - so aber ist es eleganter
Gruss
Thomas
Verfasst: Mi, 18.04.2007 13:43
von Simon23
Hey Thomas,
danke für deine schnelle Hilfe. Ich bin bez. Programmierung totaler Anfänger.
Wie kann ich denn folgendes mit einem Makro realisieren (anhand eines Beispiels verstehe ich vielleicht eher das Vorgehen):
- Zelle A1 Startwert 0
- Startwert B1 = 10
- Zelle B1 Wenn A1 gerade Zahl, dann B1+1, sonst B1
- erhöhe A1 um 1, bis A1 = 20.
Nach durchlauf des Makros müsste im in der Zelle B1 stehe, wie oft in A1 eine gerade Zahl stand.
Vielen Dank im Voraus
Simon
Verfasst: Mi, 18.04.2007 15:27
von Toxitom
Hey Simon,
Ich bin bez. Programmierung totaler Anfänger.
Dann wird es bestimmt schwer
Also, folgendes Beispiel sollte funktionieren (wobei ich nicht verstehe, warum in Zelle B1 schon ein Startwert stehen soll??
Egal:
Code: Alles auswählen
REM Das Makro
sub Beispiel_makro
oDoc = thisComponent 'Zugiff auf das Dokument
oSheet = oDoc.sheets(0) 'Erstes Tabellenblatt
oZelleA = oSheet.getCellRangeByName("A1") 'Zelle A1
oZelleB = oSheet.getCellRangeByName("B1") 'Zelle B1
iWertA = oZelleA.value 'Wert (Zahl) der Zelle A1 (Achtung: Ganzzahl!)
iWertB = oZelleB.value 'Wert (Zahl) der Zelle B1 (Achtung: Ganzzahl!)
REM Jetzt die Schleife
for i = 0 to 20 '20 Durchgänge
oZelleA.value = oZelleA.value + 1 'eins mehr, wird angezeigt
if (oZelleA.value MOD 2) = 0 then 'gerade Zahl
oZelleB.value = oZelleB.value + 1
end if
wait(1000) ' eine Sekunde warten - sonst siehst du nix
next
end sub
Viele Grüße
Thomas
Verfasst: Mi, 18.04.2007 16:11
von Simon23
Hey Thomas,
vielen Dank!!!! Ich probiere es heute abend direkt aus.
Den Startwert habe ich nur eingefügt um zu sehen, wie Startwerte gehandelt werden (könnte später vielleicht mal wichtig sein).
Ist das Buch (Makros in OpenOffice) von dir?
Simon
Verfasst: Mi, 18.04.2007 16:40
von Toxitom
Ist das Buch (Makros in OpenOffice) von dir?
Wenn du das meinst in meiner Signatur - das ist von mir
Gruss
Thomas
Verfasst: Mi, 18.04.2007 17:24
von Simon23
Ist das Buch auch für Laien verständlich?
Verfasst: Do, 19.04.2007 08:11
von Toxitom
Hey Simon,
Ja, es ist
Gruss
Thomas
Verfasst: Do, 19.04.2007 11:33
von Simon23
Hey Thomas,
ich werde es mir nächsten Monat wahrscheinlich bestellen (aktuell sind meine Finanzen etwas knapp, bin armer Student).
Ich habe mir jedoch ein Handbuch ausgedruckt und habe ein Beispiel Programm eingegeben:
Code: Alles auswählen
REM ***** BASIC *****
Sub Sort
Dim Entry(1 To 6) As String
Dim Count As Integer
Dim Count2 As Integer
Dim Temp As String
Entry(1) = Patty
Entry(2) = Kurt
Entry(3) = Thomas
Entry(4) = Michael
Entry(5) = David
Entry(6) = Cathy
For Count = 1 To 6
For Count2 = Count + 1 To 6
If Entry(Count) > Entry(Count2) Then
Temp = Entry(Count)
Entry(Count) = Entry(Count2)
Entry(Count2) = Temp
End If
Next Count2
Next Count
For Count = 1 To 6
Print Entry(Count)
Next Count
End Sub
Es erscheint einfach nur eine leere Box,bei der man "OK" klicken kann.
Was habe ich da falsch gemacht?
Gruß
Simon
Verfasst: Do, 19.04.2007 13:45
von Toxitom
Hey Simon,
na ja, ist ein einfacher "Bubble-Sort" Allgorytmus.
Mindestens hast du die Varaiblen falsch zugewiesen. Strings (Texte) müssen in doppelte Anführungszeichen eingeschlosen werden

Ich habe den Code etwas verbessert - damit man etwas sieht:
Code: Alles auswählen
Sub Sort
Dim Entry(1 To 6) As String
Dim Count As Integer
Dim Count2 As Integer
Dim Temp As String
Entry(1) = "Patty"
Entry(2) = "Kurt"
Entry(3) = "Thomas"
Entry(4) = "Michael"
Entry(5) = "David"
Entry(6) = "Cathy"
For Count = 1 To 6
For Count2 = Count + 1 To 6
If Entry(Count) > Entry(Count2) Then
Temp = Entry(Count)
Entry(Count) = Entry(Count2)
Entry(Count2) = Temp
End If
Next Count2
Next Count
For Count = 1 To uBound(Entry())
s = s & entry(count) & chr(13)
Next Count
msgbox s
End Sub
Viele Grüße
Thomas
Verfasst: Do, 19.04.2007 14:20
von Simon23
Jetzt klappt es! Vielen Dank, es lag an den Anführungszeichen für die Strings, zudem war meine Schleife zunächst zulang, so das der Array nicht adressiert worden konnte.
Danke Dir!
PS.: Eins ist mir noch nicht ganz klar, sind in For-Schleifen Zeilenumbrüche wichtig? Beziehnungsweise man muss der Code in einer Zeile stehen, wann ist es unwichtig?