Seite 1 von 1

Ansprechen von Spalten über Spaltennummer

Verfasst: Di 8. Feb 2022, 11:54
von Mike_S
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

Re: Ansprechen von Spalten über Spaltennummer

Verfasst: Di 8. Feb 2022, 13:49
von mikele
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?

Re: Ansprechen von Spalten über Spaltennummer

Verfasst: Di 8. Feb 2022, 13:55
von Mike_S
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

Re: Ansprechen von Spalten über Spaltennummer

Verfasst: Di 8. Feb 2022, 14:02
von mikele
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.