Re: [de-users] Zelle als Referenz an Basicfunktion bergeben
[EMAIL PROTECTED] schrieb: Hoi Marc Marc Santhoff wrote: Am Mi, den 09.03.2005 schrieb [EMAIL PROTECTED] um 14:58: Hoi Jörg Besten Dank für Deine Hilfe. Jörg Schmidt wrote: das ist vielleicht doch nicht das was Du suchst? Dann nimm doch: =TEST(ZELLE(Sheet);SPALTE(C3);ZEILE(C3)) Mit dieser Hilfe bin ich nun tatsächlich etwas weiter gekommen. Ich stolpere aber von einem Problem zum Nächsten. Die OO-Basic-Umgebung ist sehr mühsam zum arbeiten. - Unverständliche Fehlermeldungen (z.B. Variable nicht definiert sagt aber nicht welche! So ein blödsinn) Stimmt, aber Du kannst otion explicit als erste Zeile im Modul benutzen, dannmit werden Tippfähler schonmal ausgeschlossen... Nachdem ich durch einen Tippfehler etwas herumsuchen musste hatte ich genau diese Option aktiviert. Aber dann ging es erst richtig los: Da die Fehler nicht beim Compilieren über die Symbolleiste gefunden werden - verstehe sowieso nicht was dieser Knopf soll, der bewirkt doch überhaupt nichts - kommen dann Doch, der bewirkt, dass geprüft wird, ob eine verwendete Variable überhaupt definiert ist. Das ist durchaus sinnvoll, nur nicht definierte Variablen können Fehler enstehen die sehr schwer zu finden sind. option explicit soll den Programmierer dazu bringen, dass er sich _vorher_ überlegt welcher Datentyp in der Variablen abgelegt werden soll. Es ist ein Unterschied ob z.B: integer oder double Ohne Definition wird eine Variable beim ersten Auftreten automatisch dem verwendeten Datentyp zugeordnet a=myfunc(x,y) - myfunc rechnet irgendwas und liefert rein zufällig 1 - integer b=249080836083689749477393793,987897347979435 - double c=4,5 -double a=b*c (wobei ich jetzt nicht geprüft habe, ob meine Zahlen wirklich dem jew. Typ entsprechen ;) In der Hilfe unter Variablen; Typen und Namen steht das) Da a vom typ integer ist wird diese Multiplikation sicher nicht das gewünschte Ergebnis liefern. Diesen Fehler wird man u.U. sehr lange suchen... haufenweise Meldungen von Laufzeitfehlern (die ich übrigends inzwischen gefunden habe - eine Pause bewirkt manchmal Wunder) wenn ich Ctrl-Shift-F9 anwende. Du hast schon die Funktion zum Übersetzen des Codes entdeckt? In der Funktionsleiste das kleine Symbol, das ähnlich wie ein Stapel aussieht. [...] Obwohl man einen Breakpoint setzt wird dieser oft gar nicht erreicht Logisch, wenn vorher schon Fehler sind weil irgendwo auf eine andere gespeicherte Version zugegriffen wird. Mit alles schliessen und neu öffnen kann man dieses Problem manchmal lösen. Test's werden dadurch aber äusserst mühsam. Man kriegt Calc nur mit Ctrl-Shift-F9 dazu alles neu zu berechnen, was aber dann häufig zu Abstürzen führt weil irgendwo eine Referenz oder sonst was nicht stimmt. Aber eben, die Fehlermeldungen sind dazu schlicht unbrauchbar. Es könnte sein, dass, verursacht durch vorherige Fehler, das Makro noch nicht durchgelaufen ist. Wenn Du die Ausführung dann nochmal anstösst, hast Du mehrere Abläufe im Speicher. Vorher immer dafür sorgen, dass alle Makro's wirklich beendet sind: Roter Punkt in der Funktionsleiste, zeigt, dass da noch was läuft. [...] Beispiel-Aufruf aus einer Zelle: =NOTENSCHNITTGEWICHTETOO(ZELLE(Sheet);ZEILE(A15);8;SPALTE($F15);SPALTE($I15);SPALTE($L15);SPALTE($O15);SPALTE($R15);SPALTE($W15);SPALTE($Z15);SPALTE($AC15);SPALTE($AF15);SPALTE($AI15)) Die Argumente bedeuten: 1: Referenz auf das Sheet mit der Zelle 2: Zeilennummer mit Datenzellen 3: Zeilennummer mit der Gewichtung ab 4: Spaltennummern der Datenzellen (bis 20 optionale Datenzellen möglich) Die Basicfunktionen: Function NotenSchnittGewichtetOO( Tabelle As Variant, Zeile as Integer, Gewichtzeile As Integer, _ optional Arg0,optional Arg1,optional Arg2,optional Arg3,optional Arg4, _ optional Arg5,optional Arg6,optional Arg7,optional Arg8,optional Arg9, _ optional Arg10,optional Arg11,optional Arg12,optional Arg13,optional Arg14, _ optional Arg15,optional Arg16,optional Arg17,optional Arg18,optional Arg19 ) As Double Das schaut irgendwie gruslig aus ;) IMHO besser: Übergib einen string und mach ein Array draus: 'Sheet kannst Du automatisch ermitteln. '=NOTENSCHNITTGEWICHTETOO(ZEILE(A15);8;SPALTE($F15);SPALTE($I15);SPALTE($L15)) 'Aus soffice[Tools]: 'Function ArrayOutOfString(BigString, Separator as String, Optional MaxIndex as integer) 'Also (ungetestet): Function NotenSchnittGewichtetOO( Tabelle As Variant,_ Zeile as Integer,_ Gewichtzeile As Integer,Spalten as String) Dim Doc As Object Dim Sheet As Object Dim Cell As Object Dim Idx as Integer Dim Zaehlersumme As Double Dim Nennersumme As Double Dim Spalte As Integer Dim Gewicht As Double Dim NotenSpalten() As Variant Notenspalten=ArrayOutOfString(Spalten,;)
Re: [de-users] Zelle als Referenz an Basicfunktion bergeben
Am Mi, den 09.03.2005 schrieb [EMAIL PROTECTED] um 14:58: Hoi Jörg Besten Dank für Deine Hilfe. Jörg Schmidt wrote: Hallo, na indem Du so aufrufst: =TEST(SPALTE(Tabelle2.C3);ZEILE(Tabelle2.C3)) das ist vielleicht doch nicht das was Du suchst? Dann nimm doch: =TEST(ZELLE(Sheet);SPALTE(C3);ZEILE(C3)) Mit dieser Hilfe bin ich nun tatsächlich etwas weiter gekommen. Ich stolpere aber von einem Problem zum Nächsten. Die OO-Basic-Umgebung ist sehr mühsam zum arbeiten. - Unverständliche Fehlermeldungen (z.B. Variable nicht definiert sagt aber nicht welche! So ein blödsinn) Stimmt, aber Du kannst otion explicit als erste Zeile im Modul benutzen, dannmit werden Tippfähler schonmal ausgeschlossen... - Dauernd Totalabstürze Da dürfte nicht sein. Kannst Du irgendwie feststellen, welche Aktion den Absturz provoziert? - Obwohl man in Basic etwas ändert wird dies vom Sheet nicht übernommen. Man hat das Gefühl, dass irgendwo noch auf eine alte Version zugegriffen wird. Plötzlich wird die eigene Basic-Routine auch nicht mehr erkannt. Obwohl man einen Breakpoint setzt wird dieser oft gar nicht erreicht weil irgendwo auf eine andere gespeicherte Version zugegriffen wird. Mit alles schliessen und neu öffnen kann man dieses Problem manchmal lösen. Test's werden dadurch aber äusserst mühsam. Man kriegt Calc nur mit Ctrl-Shift-F9 dazu alles neu zu berechnen, was aber dann häufig zu Abstürzen führt weil irgendwo eine Referenz oder sonst was nicht stimmt. Aber eben, die Fehlermeldungen sind dazu schlicht unbrauchbar. Hört sich ja schrecklich an. Wenn der Fehler im BASIC passiert solltest Du die IDE geöffnet und die betreffende Zeile angezeigt bekommen. Welche Version von OOo und welches Betriebssystem benutzt Du denn? Das grosse Manko, dass Zellen nur als CallByValue übergeben werden kann leider nur mit grossem Aufwand und gebastel umgangen werden. Ohne den Quelltext zu sehen, wird man Dir schwer helfen können. Gruß, Marc - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [de-users] Zelle als Referenz an Basicfunktion bergeben
Hoi Marc Marc Santhoff wrote: Am Mi, den 09.03.2005 schrieb [EMAIL PROTECTED] um 14:58: Hoi Jörg Besten Dank für Deine Hilfe. Jörg Schmidt wrote: das ist vielleicht doch nicht das was Du suchst? Dann nimm doch: =TEST(ZELLE(Sheet);SPALTE(C3);ZEILE(C3)) Mit dieser Hilfe bin ich nun tatsächlich etwas weiter gekommen. Ich stolpere aber von einem Problem zum Nächsten. Die OO-Basic-Umgebung ist sehr mühsam zum arbeiten. - Unverständliche Fehlermeldungen (z.B. Variable nicht definiert sagt aber nicht welche! So ein blödsinn) Stimmt, aber Du kannst otion explicit als erste Zeile im Modul benutzen, dannmit werden Tippfähler schonmal ausgeschlossen... Nachdem ich durch einen Tippfehler etwas herumsuchen musste hatte ich genau diese Option aktiviert. Aber dann ging es erst richtig los: Da die Fehler nicht beim Compilieren über die Symbolleiste gefunden werden - verstehe sowieso nicht was dieser Knopf soll, der bewirkt doch überhaupt nichts - kommen dann haufenweise Meldungen von Laufzeitfehlern (die ich übrigends inzwischen gefunden habe - eine Pause bewirkt manchmal Wunder) wenn ich Ctrl-Shift-F9 anwende. - Dauernd Totalabstürze Da dürfte nicht sein. Kannst Du irgendwie feststellen, welche Aktion den Absturz provoziert? Dies hatte immer mit diesen Laufzeitfehlern, Div durch 0 oä zu tun. Wenn das Dokument nach einem Absturz wieder geöffnet wird, wird es wieder hergestellt, die Basicfunktionen werden aber aus dem Sheet nicht mehr gefunden (sind aber in der Basic-IDE). Erst wenn das Dokument geschlossen und erneut geöffnet wird gehen diese wieder. - Obwohl man in Basic etwas ändert wird dies vom Sheet nicht übernommen. Man hat das Gefühl, dass irgendwo noch auf eine alte Version zugegriffen wird. Plötzlich wird die eigene Basic-Routine auch nicht mehr erkannt. Obwohl man einen Breakpoint setzt wird dieser oft gar nicht erreicht weil irgendwo auf eine andere gespeicherte Version zugegriffen wird. Mit alles schliessen und neu öffnen kann man dieses Problem manchmal lösen. Test's werden dadurch aber äusserst mühsam. Man kriegt Calc nur mit Ctrl-Shift-F9 dazu alles neu zu berechnen, was aber dann häufig zu Abstürzen führt weil irgendwo eine Referenz oder sonst was nicht stimmt. Aber eben, die Fehlermeldungen sind dazu schlicht unbrauchbar. Hört sich ja schrecklich an. Wenn der Fehler im BASIC passiert solltest Du die IDE geöffnet und die betreffende Zeile angezeigt bekommen. Welche Version von OOo und welches Betriebssystem benutzt Du denn? Ist es auch. Ich habe OO 1.1.1 unter Suse 9.1 Wäre schön, wenn die fehlbare Zeile angezeigt würde. (Basic-IDE habe ich logischerweise offen). Meist wird aber gar nichts von Baisc angezeigt. Manchmal überlagert sich ein Teil des Basic-Codes mit dem Sheet. Nur einmal konnte ich erkennen welche Zeile markiert war. Frage nebenbei. Bilder (Screenshots) sollte man wohl hier nicht mitschicken? Das grosse Manko, dass Zellen nur als CallByValue übergeben werden kann leider nur mit grossem Aufwand und gebastel umgangen werden. Ohne den Quelltext zu sehen, wird man Dir schwer helfen können. Quelltext aus dem Original Excel-VBA ? Durch Deinen Anstoss nahm ich noch einmal einen Anlauf und konnte nun eine profisorische Lösung finden (Zwar noch nicht in allen Details getestet). Hier meine Lösung mit OO: Beispiel-Aufruf aus einer Zelle: =NOTENSCHNITTGEWICHTETOO(ZELLE(Sheet);ZEILE(A15);8;SPALTE($F15);SPALTE($I15);SPALTE($L15);SPALTE($O15);SPALTE($R15);SPALTE($W15);SPALTE($Z15);SPALTE($AC15);SPALTE($AF15);SPALTE($AI15)) Die Argumente bedeuten: 1: Referenz auf das Sheet mit der Zelle 2: Zeilennummer mit Datenzellen 3: Zeilennummer mit der Gewichtung ab 4: Spaltennummern der Datenzellen (bis 20 optionale Datenzellen möglich) Die Basicfunktionen: Function NotenSchnittGewichtetOO( Tabelle As Variant, Zeile as Integer, Gewichtzeile As Integer, _ optional Arg0,optional Arg1,optional Arg2,optional Arg3,optional Arg4, _ optional Arg5,optional Arg6,optional Arg7,optional Arg8,optional Arg9, _ optional Arg10,optional Arg11,optional Arg12,optional Arg13,optional Arg14, _ optional Arg15,optional Arg16,optional Arg17,optional Arg18,optional Arg19 ) As Double Dim Doc As Object Dim Sheet As Object Dim Cell As Object Dim Idx as Integer Dim Zaehlersumme As Double Dim Nennersumme As Double Dim Spalte As Integer Dim Gewicht As Double Dim NotenSpalten() As Variant ' Array mit gültigen Argumenten füllen NotenSpalten = getParamArray( Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, _ Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19 ) Doc = StarDesktop.CurrentComponent Sheet =