🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Ansprechen von Spalten über Spaltennummer

Alles zur Programmierung im LibreOffice.
Antworten
Mike_S
Beiträge: 14
Registriert: Fr 15. Jan 2021, 13:08
Wohnort: Flensburg
Kontaktdaten:

Ansprechen von Spalten über Spaltennummer

Beitrag von Mike_S » Di 8. Feb 2022, 11:54

Moin zusammen!

Ich hab da mal wieder eine Frage ;-)

In meinem alten VBA Programm habe ich eine rückwärts laufende Schleife, in der der Wert er jeweils durchlaufenen Spalte/Zelle mit dem Wert einer Variablen verglichen wird und wenn Wert = Zellwert dann werden Werte zugewiesen, die später für die Verarbeitung benötigt werden:

Feste Variablen:
SP_Gesamtpunkte_Ausdauer = "X"
SP_Gesamtpunkte_Ausdauer_Zahl=24

Das Ganze sieht in VBA wie folgt aus:

Code: Alles auswählen

	    
Ausdauer_Punkte = Sheets("Ergebnisse").Cells(Eingabezeile, SP_Gesamtpunkte_Ausdauer)
For Spalte = (SP_Gesamtpunkte_Ausdauer - 1) To 9 Step -1	' In VBA wird die Spalte über die Nummer angesprochen
	If Sheets("Ergebnisse").Cells(Eingabezeile, Spalte) = Ausdauer_Punkte Then
		Ausdauer_Disziplin = Sheets("Ergebnisse").Cells(3, Spalte - 1)
		Ausdauer_Ergebnis = Sheets("Ergebnisse").Cells(Eingabezeile, Spalte - 1)
		Ausdauer = 1
		Exit For
	End If
Next Spalte


Jetzt versuche ich das mal in Starbasic umzusetzen:

Code: Alles auswählen

Ausdauer_Punkte = oSheet.getCellRangebyName(SP_Gesamtpunkte_Ausdauer & Eingabezeile).value
Startspalte = osheet.getcolumns().getbyname(SP_Gesamtpunkte_Ausdauer_Zahl)	' Ist das die Spaltennummer?
For Spalte = (Startspalte - 1) To 9 Step - 1  ' Rückwärtsschleife zum Vergleichen - das ist die Problemzeile
	if oSheet.getCellRangebyName(Spalte & Eingabezeile).value = Ausdauer_Punkte then	' Wert gefunden?
		Ausdauer_Disziplin = oSheet.getCellRangebyName(Spalte & "3") ' Disziplin aus Kopfzeile der gefundenen Spalte
		Ausdauer_Ergebnis = oSheet.getCellRangebyName(Spalte & Eingabezeile).value	' Ergebnis aus Zelle dieser Spalte
		Ausdauer = 1	' 1 = Wert gefunden
		Exit For	' Schleife verlassen
	End If
Next Spalte
Diese Prozedur benötige ich insgesamt 4 Mal für 4 verschiedene Gruppen.

Mein Problem ist die Schleife. In VBA lasse ich das einfach über die Spaltennummer rückwärts laufen. Wie kann ich denn in Starbasic dies Spaltennummer ermitteln?

Mein Versuch in Zeile 2 mit "Startspalte = osheet..." bricht mit der Fehlermeldung "BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: ./sc/source/ui/unoobj/docuno.cxx:4055."

Wo mache ich denn hier den Fehler oder kann man dieses Problem in Starbasic vielleicht auch anders lösen?!

Danke und Gruß,

Mike

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Ansprechen von Spalten über Spaltennummer

Beitrag von mikele » Di 8. Feb 2022, 13:49

Hallo,
du schreibst
SP_Gesamtpunkte_Ausdauer = "X"
SP_Gesamtpunkte_Ausdauer_Zahl=24
Was bedeutet die 24? Ist es die 24. Spalte? Ich vermute mal ja, die Spalte X ist ja die 24. Spalte. Du hast also die Spaltenummer und -bezeichung direkt zur Verfügung.
Damit ist doch Startspalte=SP_Gesamtpunkte_Ausdauer_Zahl?
Im weiteren würde ich eher mit .getCellByPosition(Spalte, Zeile) arbeiten (hier beginnen die Indizes bei 0!) und anstelle einer For-Next-Schleife eine Do-Loop-Until-Schleife nehmen.

Code: Alles auswählen

Ausdauer_Punkte = oSheet.getCellRangebyName(SP_Gesamtpunkte_Ausdauer & Eingabezeile).value
Ausdauer=0
Spalte=SP_Gesamtpunkte_Ausdauer_Zahl-1
Do
	If oSheet.getCellByPosition(Spalte, Eingabezeile-1).value = Ausdauer_Punkte then	' Wert gefunden?
		Ausdauer_Disziplin = oSheet.getCellByPosition(Spalte, 2) ' Disziplin aus Kopfzeile der gefundenen Spalte
		Ausdauer_Ergebnis = getCellByPosition(Spalte, Eingabezeile-1).value	' Ergebnis aus Zelle dieser Spalte
		Ausdauer = 1	' 1 = Wert gefunden
	End If
	Spalte=Spalte-1
Loop until Ausdauer=1 or Spalte=8
Ist es richtig, dass du Spalten 9-24 (also I bis X)nach den Ausdauer-Punkten durchsuchen möchtest und wenn sie vorhanden sind die zugehörige Disziplin (die in der 3. Zeile steht) herausfinden möchtest?
Gruß,
mikele

Mike_S
Beiträge: 14
Registriert: Fr 15. Jan 2021, 13:08
Wohnort: Flensburg
Kontaktdaten:

Re: Ansprechen von Spalten über Spaltennummer

Beitrag von Mike_S » Di 8. Feb 2022, 13:55

Hi Mikele!

Danke schon mal, werde das mit .getCellByPosition(Spalte, Zeile) gleich mal ausprobieren!

Und zu Deiner Frage:
Ist es richtig, dass du Spalten 9-24 (also I bis X)nach den Ausdauer-Punkten durchsuchen möchtest und wenn sie vorhanden sind die zugehörige Disziplin (die in der 3. Zeile steht) herausfinden möchtest?
Genau so ist es: Ich ermittle da die Höchstpunktzahl in einer Gruppe und suche dann die zugehörige Disziplin raus, damit ich die beiden Werte dann in einem anderen Tabellenblatt für die Druckaufbereitung nutzen kann.

Danke und Gruß

Mike

mikele
* LO-Experte *
Beiträge: 1930
Registriert: Mo 1. Aug 2011, 20:51

Re: Ansprechen von Spalten über Spaltennummer

Beitrag von mikele » Di 8. Feb 2022, 14:02

Hallo,
ist die Höchstpunktzahl schon bekannt oder wird sie aus der Eingabezeile, Spalte I bis X, erst noch bestimmt?
Genau so ist es: Ich ermittle da die Höchstpunktzahl in einer Gruppe und suche dann die zugehörige Disziplin raus, damit ich die beiden Werte dann in einem anderen Tabellenblatt für die Druckaufbereitung nutzen kann.
Dafür würdest du aber nicht unbedingt ein Makro benötigen.
Gruß,
mikele


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten