Zähler für bestimmt Fälle - bei ausführen eines Makros
Moderator: Moderatoren
Zähler für bestimmt Fälle - bei ausführen eines Makros
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
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
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:
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
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

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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
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
Hey Simon,
Also, folgendes Beispiel sollte funktionieren (wobei ich nicht verstehe, warum in Zelle B1 schon ein Startwert stehen soll??
Egal:
Viele Grüße
Thomas
Dann wird es bestimmt schwerIch bin bez. Programmierung totaler Anfänger.

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
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Wenn du das meinst in meiner Signatur - das ist von mirIst das Buch (Makros in OpenOffice) von dir?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hey Simon,
Ja, es ist
Gruss
Thomas
Ja, es ist

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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:
Es erscheint einfach nur eine leere Box,bei der man "OK" klicken kann.
Was habe ich da falsch gemacht?
Gruß
Simon
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
Zuletzt geändert von Simon23 am Do, 19.04.2007 14:16, insgesamt 2-mal geändert.
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:
Viele Grüße
Thomas
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
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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?
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?