Funktion gibt keinen Wert zurück.

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Funktion gibt keinen Wert zurück.

Re: Funktion gibt keinen Wert zurück.

von balu » Mi, 11.12.2013 20:02

Hallo Max,

so von Frührentner zu Rentner, ich hatte mir keine Mühe mit MOD gemacht :wink:. Das wusste ich halt aus eigener Erfahrung und Anwendung. Ich bin aber auch noch nicht so der Kenner-Könner, leider.

Warum das in dem alten größeren Programm mit dem code nicht funktioniert, aber in dem neuen Tabellenblatt, hab ich noch nicht gefunden.
Wie wärs denn mit einer Beispieldatei? Oder wenn es geht überhaupt die Problemdatei.

Wie Du an meinem Code (=REST(2014;4) wohl erkannt hast, hab ich nicht viel Ahnung mit Basic.
Das hat in diesem Falle nicht viel mit Ahnung zu tun, da der Weg den Du da eingeschlagen hast durchaus ein legetimer Weg ist. Denn nicht für alle Calc-Funktionen gibt es passende Gegenstücke in Basic. Auch ich habe so einen ähnlichen Weg schon eingeschlagen, da es ansonsten keine passende alternative mit Basic gibt, oder ich sie noch nicht gefunden habe. Also Kopf hoch, ist alles halb so wild!

Im Moment nudle ich noch an einer Funktion herum,die Zellen oder Zellbereiche in andere Bereiche kopiert/überträgt.
Och da jibbets verschiedene Methoden. Zum Beispiel CopyRange: 7.2.6 Wie kann man Zellbereiche kopieren?
Oder aber z.B. mit getDataArray und setDataArray.

Code: Alles auswählen

Sub Zell_Bereich_kopieren
	dim aDatArray()
	aDatArray = thisComponent.sheets.getByName("Tabelle1").getCellRangeByName("A5:A10").getDataArray
	thisComponent.sheets.getByName("Tabelle2").getCellRangeByName("B15:B20").setDataArray(aDatArray)
End sub
Mit der erst genannten Methode kann man nur innerhalb eines Dokuments kopieren. Mit der zweiten kann man auch zwischen zwei verschiedenen Dokumenten (Dateien) kopieren, aber das ist ein anderes Thema.



Gruß
balu

Re: Funktion gibt keinen Wert zurück.

von MaximilianWe » Mi, 11.12.2013 18:26

toll, dass Dui Dir so viel Mühe gibst. Danke. Warum das in dem alten größeren Programm mit dem code nicht funktioniert, aber in dem neuen Tabellenblatt, hab ich noch nicht gefunden. Das liegt aber auch sicher an mir. Wie Du an meinem Code (=REST(2014;4) wohl erkannt hast, hab ich nicht viel Ahnung mit Basic. Ich bin ein "gelernter" C-Programmierer (altersbedingt habe ich mit Assembler angefangen) und helfe mir eben mitdem was ich im Handbuch Star.Basic so finde oder was sich durch Code-Aufzeichnung unter calc nachvollziehen kann. Da rent man schon von einer Ecke an die andere. Im Moment nudle ich noch an einer Funktion herum,die Zellen oder Zellbereiche in andere Bereiche kopiert/überträgt. Star Basic hat sich wohl die Fehlermeldung " ein belegter Zellbereich kann nicht außerhalb des Blattes übedrtragen werden" ausgedacht, mich zu ärgern :( Aber als Rentner hat man ja Zeit und kommt Zeit kommt Code.

Max

Re: Funktion gibt keinen Wert zurück.

von balu » Mi, 11.12.2013 13:10

Mahlzeit Max,

mal nen kleinen Tipp am Rande.
Das hier

Code: Alles auswählen

erg = test21("C9","=REST(2014;4)")
[...]
ozelle.formulalocal = aufgabe
kann man sich etwas vereinfachen, wenn man die passende Basic Laufzeit dafür nimmt. Also anstatt mit =REST() und formulalocal zu arbeiten, einfach MOD nehmen ohne formulalocal. Ist ja nur eine Idee meinerseits.
Hier mal ein Beispiel.

Code: Alles auswählen

Sub Main
print 2014 mod 4
End Sub
Oder hat das einen besonderen Grund warum Du mit der Calc Funktion =REST() arbeitest?

aber die Werte werden nicht in die betreffenden Zellen ausgegeben
Dann dürften wohl die Zellangaben im Code nicht mit den gewünschten Zellen im Tabellenblatt übereinstimmen, so rein theoretisch.



Gruß
balu

Re: Funktion gibt keinen Wert zurück.

von MaximilianWe » Mi, 11.12.2013 12:13

F3K Total hat geschrieben:Hallo,
eine function kann einen Wert zurückgeben, du ruftst aber eine Subroutine auf, denn S_set_Formula ist eine solche.
Versuche es so:

Code: Alles auswählen

Sub Main
    wert1 = lesen(0,"B9")
    msgbox " der Wert1 ist= " & wert1
    wert2 = test21 ("C9","=REST(2014;4)")
    msgbox " der Wert2 ist= " & wert2
end sub
ist übrigens nichts anderes als get_value und S_set_Formula in einer Sub :roll:
Gruß R
danke für Deine Mithilfe. Wenn ich eine neue Tabelle anlege und den Code so eingebe, funktioniert das bestens, Die Werte werden in die Variablen übergeben und erscheinen in der betreffenden Zelle. Wenn ich den Code allerdings in das vorhandene umfangreichere Programm einbinde , werden zwar die Werter richtig in die Variablen übergeben, aber die Werte werden nicht in die betreffenden Zellen ausgegeben.
Da bin ich jetzt noch am Grübeln und ausprobieren. Wenn ich etwas interessantes herausfinde, melde ich mich nochmal.

Max

Re: Funktion gibt keinen Wert zurück.

von F3K Total » Di, 10.12.2013 21:40

Hallo,
eine function kann einen Wert zurückgeben, du ruftst aber eine Subroutine auf, denn S_set_Formula ist eine solche.
Versuche es so:

Code: Alles auswählen

Sub Main
    wert1 = lesen(0,"B9")
    msgbox " der Wert1 ist= " & wert1
    wert2 = test21 ("C9","=REST(2014;4)")
    msgbox " der Wert2 ist= " & wert2
end sub
ist übrigens nichts anderes als get_value und S_set_Formula in einer Sub :roll:
Gruß R

Re: Funktion gibt keinen Wert zurück.

von MaximilianWe » Di, 10.12.2013 21:01

F3K Total hat geschrieben:Wieso gebe ich denn wohl ein Beispieldokument mit?
Da siehst Du, das es geht.
R
auch auf die Gefahr des Unmuts und endender Geduld.
Es geht ja alles, ausser dass ich zur weiteren Verarbeitung das Ergebnis ( erg ) haben will.
der nachfolgende Code jedenfalls ergibt für wert1 bzw. wert kein Ergebnis. I
Ich nehme es Dir nicht übel, wenn Du aufgibst, Dich damit zu befassen.

Max

Code: Alles auswählen

Sub Main

wert1=get_value(0,"B9")
msgbox " der Wert1 ist= " & wert1

wert2=S_set_Formula ("C9","=REST(2014;4)")
msgbox " der Wert2 ist= " & wert2
end sub



Sub get_value(tab as string, dest as string) as string
    erg = lesen(tab,dest)
    msgbox " das Ergebnis erg von lesen ist= " & erg
    
end sub

Sub S_set_Formula (dest as string, aufgabe as string) 
    erg = test21(dest, aufgabe)
    msgbox "Das Ergebnis der Berechnung lautet" + chr(13) + erg
end sub

function lesen( tab as integer, pos as string) as string
    ozelle = ThisComponent.sheets(tab).getCellRangeByName(pos)
    lesen = ozelle.string
end Function

function test21(dest as string,aufgabe as string) as double
    msgbox "dest in Sub= " & dest
    msgbox "aufgabe in Sub " & aufgabe
    ozelle= ThisComponent.sheets(tab).getCellRangeByName(dest)
    ozelle.formulalocal = aufgabe
    test21 = ozelle.value
end function

Re: Funktion gibt keinen Wert zurück.

von F3K Total » Di, 10.12.2013 19:29

Wieso gebe ich denn wohl ein Beispieldokument mit?
Da siehst Du, das es geht.
R

Re: Funktion gibt keinen Wert zurück.

von MaximilianWe » Di, 10.12.2013 19:28

danke für die schnelle Hilfe; aber ich dreh mich wohl irgendwie im Kreis. Bei Deiner Funktion LESEN wird bei mir in der 2.Zeile *)angezeigt: Syntaxfehler. Ich hab den Code mit KOPIEREN übernommen, müßte also kein Tippfehler sein.

Max

Codeauszug:
function lesen( tab as integer, pos as string) as string
ozelle = ThisComponent.sheets(tab).getCellRangeByName(pos) *)

Re: Funktion gibt keinen Wert zurück.

von F3K Total » Di, 10.12.2013 17:12

Hallo,
du hast da teilweise unnötigen Code aus einem "aufgenommenen" Makro mit geschriebenem Code wild durcheinander gewürfelt.
Die folgenden Makros funktionieren, wenn Du in B9 einen Text schreibst.
Nimm get_value um den Inhalt von B9 auszulesen und S_set_Formula um die Zelle C9 zu beschreiben.

Code: Alles auswählen

Sub get_value
    erg = lesen(0,"B9")
    msgbox erg
end sub

Sub S_set_Formula
    erg = test21("C9","=REST(2014;4")
    msgbox "Das Ergebnis der Berechnung lautet" + chr(13) + erg
end sub

function lesen( tab as integer, pos as string) as string
    ozelle = ThisComponent.sheets(tab).getCellRangeByName(pos)
    lesen = ozelle.string
end Function

function test21(dest as string,aufgabe as string) as double
    msgbox "dest in Sub= " & dest
    msgbox "aufgabe in Sub " & aufgabe
    ozelle= ThisComponent.sheets(tab).getCellRangeByName(dest)
    ozelle.formulalocal = aufgabe
    test21 = ozelle.value
end function
Siehe Beispiel.
Gruß R
PS: wenn du beim Editieren deine Codezeilen markierst und oben einmal auf Code klickst, bekommst Du die weissen Fenster, die das Lesen des Codes vereinfachen.
EDIT CROSSPOSTING:
http://www.openoffice-forum.de/viewtopi ... 077#p12238
Dateianhänge
MM.ods
(9.14 KiB) 106-mal heruntergeladen

Funktion gibt keinen Wert zurück.

von MaximilianWe » Di, 10.12.2013 14:25

Es sind wahrscheinlich Fragen über die ein geübter lächelt.
ich versuche - nach langer PAuse - ein OO-Basic-Programm zu schreiben, danei komme ich auf folgende - mir momentan unlösbare - Probleme:
Fall 1:
Ich will einen Wert in einer TAbSpalte in eine Variable einlesen.
aufgerufen mit erg=lesen(0,"B9"); erg ist nach Ausführung undefiniert

Code: Alles auswählen

function lesen( tab as integer, pos as string) as string
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
ozelle= ThisComponent.sheets(tab).getCellRangeByName(pos)
lesen= ozelle.string
end Function


Fall2:
Die Funktion schreibt das Ergebnis einer Basic-Funktion in ein bestimmtes Feld und soll diesen Wert auch zurückgeben:
Aufruf in Main: erg= test21("C9"=REST(2014;4)")

Code: Alles auswählen

function  test21(dest as string,aufgabe as string) as string
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim ozelle as object
dim erg as integer
dim ergs as string
rem ----------------------------------------------------------------------
msgbox "dest in Sub=" & dest
msgbox "aufgabe in Sub=" & aufgabe
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = dest
dispatcher.executeDispatch(document,".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = aufgabe

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())
ozelle= ThisComponent.sheets(tab).getCellRangeByName(dest)
test21= ozelle.string

end function
es wird kein Wert zurückgegeben. Der richtige Wert wird jedoch in "C9" geschrieben.

diese Programmierung habe ich hier gespeichert und - wie ich meine - auch schon erfolgreich verwendet.
Wer hilft mir üben Gedankenknoten?



Moderation:
Zur Darstellung von Programmcode sind in der Forums-Software nicht die …[​/b] Tags vorgesehen, sondern die [​code]…[​/code] Tags. Diese habe ich für dich gesetzt.
lorbass, Moderator

Nach oben