Re: [de-users] Zelle als Referenz an Basicfunktion bergeben

2005-03-11 Diskussionsfäden Bernd Obermayr
[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

2005-03-09 Diskussionsfäden Marc Santhoff
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

2005-03-09 Diskussionsfäden huas
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 =