Zähler für bestimmt Fälle - bei ausführen eines Makros

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Zähler für bestimmt Fälle - bei ausführen eines Makros

Beitrag 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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Beitrag 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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Beitrag 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
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Ist das Buch (Makros in OpenOffice) von dir?
Wenn du das meinst in meiner Signatur - das ist von mir :-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Beitrag von Simon23 »

Ist das Buch auch für Laien verständlich?
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Simon,

Ja, es ist :-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Beitrag 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
Zuletzt geändert von Simon23 am Do, 19.04.2007 14:16, insgesamt 2-mal geändert.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Simon23
**
Beiträge: 31
Registriert: Mi, 05.07.2006 12:46

Beitrag 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?
Antworten