Seite 1 von 2

[gelöst] in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 15:37
von wega
Hallo zusammen,

ich habe jetzt mehrere Optionen
wie getByName bzw Sheets(index) probiert und komme zu keinem Ergebnis.

meine Sequenz lautet wie folgt:

Code: Alles auswählen

	Blatt = Tabelle.Sheets(1)
	Blatt.getcellRangeByName("A1").String = "Die " & ll & "-te Eigenschwingung hat die Eigenfrequenz " & omr
als Meldung bekomme ich:
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Sheets.

Kann mir irgendwer schreiben wie der Übergang von einem zum anderen Tabellenblatt gelingt?

Mit freundlichem Gruß
Werner

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 19:23
von karolus
Wie kommt den aktuell das Objekt Tabelle zustande?
Warum zeigst du nur 2 Codezeilen mitten aus der Lameng?
Warum benutzt du immer noch nicht mri?

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 19:50
von wega
Hallo karolus,
erst einmal Danke, dass Du geantwortet hast.

Die Tabelle wird in meinem Programm mit folgendem Code
geöffnet.

Code: Alles auswählen

'**************************************************************
' Tabelle oeffnen
'**************************************************************
'
Sub Tabelle_oeffnen (Tabelle)
	Dim Mappe as object
	Dim dummy()
    dim myFileProp() as new com.sun.star.beans.PropertyValue
    	
	url=converttourl("\home\buero\Libreoffice-Basic\eigene-BASIC-Programme\Balkenschwinger-Kenngroeszen.ods")

    Mappe = StarDesktop.loadComponentFromURL(url, "_blank", 0, myFileProp() )
	Tabelle = Mappe.getSheets().getbyIndex(0)
End Sub
Das funktioniert auch so weit ganz gut, da ich aus dieser Datei (sprich dem ersten Tabellenblatt) Informationen
zum Programm auslese.
Im weiteren Fortlauf des Programms möchte ich die Teilergebnisse in ein zweites Tabellenblatt schreiben, welches ich "Ausgabe" genannt habe.

Zur Kontrolle, ob die CALC-Tabelle noch aktiviert ist, habe ich mit folgender Sequenz

Code: Alles auswählen

msgbox tabelle.getcellRangeByName("A14").string
noch einmal vom ersten Tabellenblatt eine Information gezogen, die in "A14" steht. RESULTAT: -> es funktioniert.

Wie aber aktiviere ich jetzt das zweite Tabellenblatt, um da hinein Informationen zu schreiben.
Ich bekomme bei Sheets so wohl auch bei getByName nur Fehlermeldungen.

Meine vergeblichen Versuche stelle ich einmal vor:

Code: Alles auswählen

	'AllSheets = Tabelle.Sheets
	'msgbox AllSheets.string
	msgbox tabelle.getcellRangeByName("A14").string
	'aktiviereTabelle_Nummerzwei
	Sheets = document.Sheets  'get the container of all Sheets
	Blatt = Sheets.getByName("Ausgabe")   'get the sheet named Sheet2
	Controller = document.getcurrentController
	Controller.setActiveSheet(Blatt)
	'Controller = document.getcurrentController
	'Controller.setActiveSheet(Sheet) 
	'Blatt = Sheet.getByName("Ausgabe")
	Blatt.getcellRangeByName("A1").String = "Die " & ll & "-te Eigenschwingung hat die Eigenfrequenz " & omr


Da wäre ich dem Ratschlag bzw. der Hilfe eines erfahrenen Programmiers dankbar.

Mit freundlichem Gruß
Werner

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 20:14
von karolus
Hallo

Gut - dann geh doch mal Zeile für Zeile durch den oberen Code.
Mappe ist der Bezug aufs Document.
da hast du bereits die Methoden …getSheets() benutzt, und nachher:

Code: Alles auswählen

Tabelle = ……getByIndex(0) 'die erste Tabelle
Daraus solltest du doch auch ableiten können das du die nächste Tabelle zuweisen kannst per

Code: Alles auswählen

ausgabe = Mappe.getSheets().getByIndex(1)
wobei Basic hier auch einen abgekürzten Index-zugriff erlaubt:

Code: Alles auswählen

ausgabe = Mappe.Sheets(1)
Da du erwähnst das dieses Tabellenblatt den Namen Ausgabe hat.

Code: Alles auswählen

ausgabe = Mappe.Sheets.getByName("Ausgabe")  '# geht auch!

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 20:36
von wega
Hallo karolus,

so, mit Deiner hilfe habe ich mal Ordnung in meinem Code gebracht.

Versuch Nr. 1

Code: Alles auswählen

	msgbox tabelle.getcellRangeByName("A14").string
	Blatt = Tabelle.getSheets().getByIndex(1)
	'Blatt = Tabelle.Sheets(1)
	Blatt.getcellRangeByName("A1").String = "Die " & ll & "-te Eigenschwingung hat die Eigenfrequenz " & omr
Ergebnis:
Die msgbox zeigt an: -> einseitig eingespannt und anderseitig aufliegend <-- RICHTIG, kommt von Index(0)
Nachfolgend die Fehlermeldung: -> BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: getSheets.

Versuch Nr. 2

Code: Alles auswählen

	msgbox tabelle.getcellRangeByName("A14").string
	'Blatt = Tabelle.getSheets().getByIndex(1)
	Blatt = Tabelle.Sheets(1)
	Blatt.getcellRangeByName("A1").String = "Die " & ll & "-te Eigenschwingung hat die Eigenfrequenz " & omr
Ergebnis:
Die msgbox zeigt an: -> einseitig eingespannt und anderseitig aufliegend <-- RICHTIG, kommt von Index(0)
Nachfolgend die Fehlermeldung: -> BASIC-Laufzeitfehler.
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: Sheets.

Was übersehe ich, was verstehe ich nicht?

Mit freundlichem Gruß
Werner

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 20:49
von karolus
Nein Tabelle kennt diese Methode nicht, aber Mappe würde es kennen.

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 20:59
von wega
Hallo karolus,

in beiden Fällen habe ich Tabelle gegen Mappe getauscht.

Das Ergebnis ist die Fehlermeldung:
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.

Und das , obwohl in der Dimensiondeklarierung
Dim Mappe as object
beschrieben ist.

Schon merkwürdig oder?

Mit Gruß
Werner

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 21:27
von karolus
Tut mir leid, du zeigst da immer nur Bruchstücke, anscheinend wird die zuerst gezeigte Prozedur von irgendeiner anderen Prozedur aufgerufen??
Das alles zusammen mit deinem Kraut und Rüben Rate-schema kann man von aussen nicht nachvollziehen… da musst du zunächst mal selber eine Struktur reinbringen die du auch verstehst.

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 21:59
von wega
Hallo karolus,

Ich glaub, da hast Du vollkommen recht.

Meine Schwierigkeit besteht darin, ein Fortran IV Programm aus meiner Studienzeit
in ein heutiges BASIC - Programm, wie das von LibreOffice zu übertragen.

Die vielfachen GOTO -Sprünge (vor und zurück) machen das Übertragen in heutige
Dialekte nicht gerade einfach.

Mitlerweile denke ich aber auch, dass das LibreOffice ein Problem hat, aus BASIC heraus
eine CALC-Datei zu manipulieren.
Denn, das BASIC aus einem CALC-Programm heraus aufgerufen kommt mit den
Befehlen um "sheet" herum klar.
Denn da funktionieren die Aufrufe.

Aber dennoch, vielen Dank, dass Du dir die Zeit für mein Problem genommen hast.

Mit freundlichem Gruß
Werner

Re: in geöffneter Tabelle das Blatt wechseln wie?

Verfasst: Fr 16. Sep 2022, 22:27
von Wanderer
wega hat geschrieben:
Fr 16. Sep 2022, 21:59
...
Meine Schwierigkeit besteht darin, ein Fortran IV Programm aus meiner Studienzeit
in ein heutiges BASIC - Programm, wie das von LibreOffice zu übertragen.
Am besten ganz klassisch erstmal ein Flussdiagramm zeichnen...
Die vielfachen GOTO -Sprünge (vor und zurück) machen das Übertragen in heutige
Dialekte nicht gerade einfach.
Ich würde es zwar nicht empfehlen, aber notfalls kann BASIC immer noch goto.
Mitlerweile denke ich aber auch, dass das LibreOffice ein Problem hat, aus BASIC heraus
eine CALC-Datei zu manipulieren.
Ist mir bisher nicht aufgefallen...
Denn, das BASIC aus einem CALC-Programm heraus aufgerufen kommt mit den
Befehlen um "sheet" herum klar.
Denn da funktionieren die Aufrufe.
Was die Frage aufwirft, von wo Du die Routine startest, wenn nicht aus einem Calc-Dokument ??
...