Objekt verliert Zuordnung

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

Moderator: Moderatoren

Tuennes
Beiträge: 1
Registriert: Do, 24.09.2015 15:12

Objekt verliert Zuordnung

Beitrag von Tuennes »

Hallo,

im nachfolgenden Code habe ich das Problem, dass wenn ein neues Sheet hinzugefügt wird, das Objekt "sSpieler" seine Zuordnung verliert. Es ist/verweist dann nicht mehr auf die Tabelle "Speiler" sondern auf eine andere namens "Spiel".
Der Fehler tritt nur auf, wenn If Then Schleife durchlaufen wird und ein neues Sheet hinzugefügt wird.

Code: Alles auswählen

Sub NamenPruefen 
	
	Rem ******************************************************************
	Rem Diese Funktion prüft ob für alle Spieler ein Spielbogen existiert.
	Rem Falls dies nicht der Fall ist wird ein Spielbogen neu angelegt.
	Rem ******************************************************************
	
	Dim I,K as Integer
	Dim NameExistiert as Boolean
	Dim SpielerName as String
	Dim sSpieler as Object
	Dim sSpielerBericht as Object
	
	NameExistiert=False

	sSpieler = ThisComponent.Sheets.GetByName("tmpSpielerTabelle")
	I=15

	While sSpieler.getCellByPosition(0,I).String <> ""
		SpielerName =sSpieler.getCellByPosition(0,I).String
		For K=0 to ThisComponent.Sheets().Count - 1
			If SpielerName = ThisComponent.Sheets(K).Name then
				NameExistiert=True
			end If				
		Next K
		If not NameExistiert Then
			Rem ###############################################################
			Rem Wird diese Anweisung ausgeführt verliert sSpieler die Zuordnung zum Sheet.
			Rem Interessanterweise liefert sSpieler.Name den richtigen Namen zurück.
			Rem Bei sSpieler.getCellByPosition(0,I).String verbirgt sich hinter sSpieler 
			Rem ein anderes Sheet und liefert dadurch einen falschen Wert.
			Rem Wird die Anweisung nicht ausgeführt gibt es kein Problem mit der Zuordnung.
			Rem ###############################################################
			ThisComponent.Sheets.CopyByName("Vorlage",SpielerName, 0)
			sSpielerBericht = ThisComponent.Sheets().GetByName(SpielerName)
			sSpielerBericht.getCellByPosition(1,0).String = SpielerName
		End if
		I = I + 1
		NameExistiert = False
	Wend
				
End Sub
Wer kann mir helfen bzw. erklären weshalb die Objekt-Zuordnung sich ändert wenn ein neues Sheet hinzugefügt wird?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Objekt verliert Zuordnung

Beitrag von komma4 »

Willkommen im Forum.

Wenn Du "ungarische Namenskonvention" verwenden willst, dann ist sSpieler falsch (bezeichnet einen String), sondern oSpieler wäre korrekt (das o für Objekt). Das aber nur am Rande.

Ansonsten kann ich mir erst mal nicht erklären weshalb sSpieler seine Zuordnung verlieren sollte - woran machst Du das fest?
Beschreibe mal Deinen Ablauf, welcher Fehler tritt wann (wie?) auf.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: Objekt verliert Zuordnung

Beitrag von Karolus »

Hallo

Das `Sheets`-object hat bereits eine Methode `.hasByName` --- die komische for-Schleife mitsamt der Variablen `NameExistiert` kannst du dir schenken.

Sinnvoll gekürzt komme ich auf folgenden Code ( Achtung andere Blattnamen)

Code: Alles auswählen

Sub NamenPruefen
   
   with thisComponent.Sheets

   sSpieler = .GetByName("Tabelle1")
   row=15

   While sSpieler.getCellByPosition(0,row).String <> ""
      SpielerName =sSpieler.getCellByPosition(0,row).String  
      If not .hasByName( SpielerName) Then
         .CopyByName("Tabelle2", SpielerName, 0)
         .getByName(SpielerName).getCellByPosition(1,0).String = SpielerName
      End if
      row = row+1
   Wend
   end with
            
End Sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Antworten