Tabellenfunction Objectvariable nicht belegt

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: Tabellenfunction Objectvariable nicht belegt

von Frankvas » Mo, 07.05.2007 14:28

Nach einigen veränderungen im Code geht es doch , also
doc=thisComponent war richtig und hilfreich .

gruß frank

von Frankvas » So, 22.04.2007 14:38

so , ich habe jetzt doc=thisComponent stehen . dafür gibt es jetzt eine andere Fehlermeldung.
"Falscher wert für eigenschaft " dieser Fehler wird angezeigt noch bevor die Tabelle im Fenster zusehen ist . das IDE wird nicht aufgerufen .

in die function staus habe ich noch die zeile "msgbox doc,0,"doc" eingefügt , für die variable doc wird nichts angezeigt.

Code: Alles auswählen

function staus (spalte1 as integer,kuerzel as string) as single
'zur auswertung der tabelle kürzel
'spalte1   =   aus welcher spalte die stunden zurückgegeben werden 1fürGearbeitet  2fürNachtstunden
'kuerzel  =   das zu suchende kürzel 
'staus    =   stunden    0 bei nicht gefunden
'urbaubsstunden?`!?!=?!?!?! 
dim cell as object,sheet as object
dim count as integer,ex as integer
dim kv as string
count=1
ex=0
on error goto fehler2
restart:
doc=thisComponent
msgbox doc,0,"doc"
sheet=doc.sheets.GetByName("kürzel")
on error goto 0
do 
	cell=sheet.GetCellByPosition(0,count)
	kv=cell.string
'	msgbox "kv="+kv+"kürzel"+kuerzel 
	if kv=kuerzel then 
		'gefunden
		cell=sheet.getcellbyposition(spalte1,count)
		'urlaubsstunden ????????!!!!!!!!
		'wenn cell.value <0 ist kein wert zurückgeben !!!! funst net
'		if cell.value>=0 then
		staus=cell.value
'			msgbox "gefunden"+staus
'		endif
		ex=1
	else
		if cell.string="" then
			ex=1
			msgbox " Unbekantes Kürzel" 'nichts gefunden 
			staus=0
		endif
	endif
	count=count+1
loop until ex=1  'gefunden or leer
on error goto 0
exit function 
fehler2:
'msgbox " Fehler in Tabelle Kürzel"
'opject variable nicht belegt doc
msgbox error$
doc=stardesktop.currentcomponent
goTo restart
staus=0
on error goto 0
end function 
so richtig die lösung des eigentlichen problem ist das nicht .

gruß frank

von Frankvas » Fr, 20.04.2007 10:49

Die Ide wird nicht angezeigt . Nach OK drücken bei der Fehlermeldung wird die Tabelle angezeigt .

das mit doc=thisComponent habe ich noch nicht ausprobiert , wenn es neues gibt , poste ich , kan aber ne woche dauern , arbeiten und so .

gruß frank

von Toxitom » Mo, 16.04.2007 09:00

Hey Frank,
sheet=doc.sheets.GetByName("kürzel") 'Hier dürfte die Fehlermeldung ausgelöst werden
Ist das so? Erkennst du doch daran, dass diese Zeile markiert (also schwarz hinterlegt) ist bei auftauchen der Fehlermeldung und die Basic-IDE aufgeht?

Dann kannst du doch den Fehler evt. eingrenzen:

Ist doc global definiert? Bezeiht sich "doc" auf das aktuelle Dokument, das auch das Makro in sich trägt? Wenn ja, nutze mal in der entsprechenden Zeile statt:

Code: Alles auswählen

doc=stardesktop.currentcomponent 
besser:

Code: Alles auswählen

doc=thisComponent
Da das Makro ja wahrscheinlich mit dem Starten des Dokumentes aufgerufen wird, übernimmt er möglicherweise noch das bisherige Objekt eines vorhandenen "currentComponent".

Gruss
Thomas

von Frankvas » Sa, 14.04.2007 08:58

Gibt es tatsächlich eine benutzerdefinierte Funktion die in einber Tabellenzelle aufgerufen wird, und ein Makro oder ist hier Funktion und Makro frei formuliert und eigentlich ein- und dasselbe?
In diesen Fall , ja .

Die Macro's sind im Dokument selbst gespeichert .

Hier die beteidigten Marco's

Code: Alles auswählen

 Sub Main
'bei öffnen der mappe starten

doc=stardesktop.currentcomponent
myView = doc.CurrentController
.
.
.
.
End Sub
Es folgendie drei Macro's für die Tabellenfunction

Dieses Mrcro steht in der Tabelle
=autoh(E11;E7)

Code: Alles auswählen

function autoh(bem as string,dat as integer)
'dat aus der zeile datum   funtion nur ausführen wenn dat eine zahl ist 
'function für die zeile Gearbeitet
'autoh=gearbeitet
'bem aus zeile Bemerkung/eingabe
if isNumeric(dat) and (dat <> 0)  then  'datum if not leer
'msgbox dat
	autoh=zerl(bem,1)
else
	autoh=0
endif
end function
Die zwei folgenden Mcro's machen den rest
das Marco" Zerl" wird von "autoh" aufgerufen

Code: Alles auswählen

function zerl(bem1 as string,spalte as integer) as single
'zerlegt die eingabe>>>
'bem1 = zeile eingabe
'spalte  =  [1fürGearbeitet  2fürNachtstunden ] zurückgeben
'zerl =stunden 
'InStr (SearchString, MyString) 
dim p as integer
'on error goto fehler1
'leere bem1 ?????
if bem1="" then 
	zerl=0
else
	if IsNumeric(Left(bem1, 1)) then  'zahl 
		p=InStr (bem1, "#")
		if p=0 then 
			if isNumeric(bem1) and spalte=1 then  'nur eine zahl ;spalte gearbeitet
				zerl=bem1
			else	
				zerl=0
			endif
		else	
			if spalte=1 then 
			'Gearbeitet
				zerl=left(bem1,p-1)
			else
			'nachtstunden
				zerl=right(bem1,len(bem1)-p)
			endif
		endif 
	else
	'kürzel
	zerl=staus(spalte,bem1)
	endif
endif
on error goto 0
exit function
fehler1:
msgbox "Eingabe Fehler "
zerl=0 
on error goto 0
end function 
Das Macro "staus " wird von "zerl" aufgerufen und verursacht den Fehler .Dieses Macro greift auf eine andere Tabelle zu

Code: Alles auswählen

function staus (spalte1 as integer,kuerzel as string) as single
'zur auswertung der tabelle kürzel
'spalte1   =   aus welcher spalte die stunden zurückgegeben werden 1fürGearbeitet  2fürNachtstunden
'kuerzel  =   das zu suchende kürzel 
'staus    =   stunden    0 bei nicht gefunden
'urbaubsstunden?`!?!=?!?!?! 
dim cell as object,sheet as object
dim count as integer,ex as integer
dim kv as string
count=1
ex=0
'on error goto fehler2
sheet=doc.sheets.GetByName("kürzel") 'Hier dürfte die Fehlermeldung ausgelöst werden 
do 
	cell=sheet.GetCellByPosition(0,count)
	kv=cell.string
'	msgbox "kv="+kv+"kürzel"+kuerzel 
	if kv=kuerzel then 
		'gefunden
		cell=sheet.getcellbyposition(spalte1,count)
		'urlaubsstunden ????????!!!!!!!!
		'wenn cell.value <0 ist kein wert zurückgeben !!!! funst net
'		if cell.value>=0 then
		staus=cell.value
'			msgbox "gefunden"+staus
'		endif
		ex=1
	else
		if cell.string="" then
			ex=1
			msgbox " Unbekantes Kürzel" 'nichts gefunden 
			staus=0
		endif
	endif
	count=count+1
loop until ex=1  'gefunden or leer
on error goto 0
exit function 
fehler2:
msgbox " Fehler in Tabelle Kürzel"
staus=0
on error goto 0
end function 
gruß Frank

von Stephan » Sa, 14.04.2007 01:14

Wie läuft das öffnen einen mappe ab , welche aktionen werden ausgeführt ?

Werden die Tabellenfunctionen schon ausgefürt noch bevor das ereigniss "Dokument öffnen" ein Macro starten kann ?
Im Detail müßte ich darüber erstmal nachdenken - ich erspare mir das zunächst und frage:

Gibt es tatsächlich eine benutzerdefinierte Funktion die in einber Tabellenzelle aufgerufen wird, und ein Makro oder ist hier Funktion und Makro frei formuliert und eigentlich ein- und dasselbe?

Falls es sich doch um zweierlei handelt wäre mir aus Sicht des Makros nicht erklärlich wenn die Fehlermeldung "Objektvariable nicht belegt" an dieser Stelle "doc=stardesktop.currentcomponent" erschiene, wenn die Datei normal geöffnet wird. An anderen Stellen ggf. schon, nur dazu müßte man das Makro (ggf. und Funktion) kennen.

generelle Vermutung:
liegt eine benutzerdefinierte Funktion vor wäre der Fehler typisch wenn diese nicht im Dokument selbst oder in der Bibliothek "Standard" der OOo-Bibliotheken (und nur in dieser) gespeichert ist.



Gruß
Stephan

Tabellenfunction Objectvariable nicht belegt

von Frankvas » Fr, 13.04.2007 21:25

folgendes Verhalten ist mir aufgefallen .
In der Tabelle habe ich eine selbstentworfende Function , die eine andere zelle auswertet . in der Referenzierten zelle darf ein Buchstabe stehen . Die Function greift auf eine zweite tabelle zu , um die Bedeutung des Buchstaben auszuwerten .
Bisher ist alles gut .
Wenn ich die Tabelle speichere und wieder öffne bekomme ich noch bevor die Tabelle angezeigt wird die Fehlermeldung " object- Variable nicht belegt" . In der Tabellenzelle in der die Function steht wird nicht der wert angezeigt der dort vor dem speichern stand .


Ein Macro das "doc=stardesktop.currentcomponent" definiert wird beim öffnen der Mappe ausgeführt .

Bevor ich hier noch das gesammte listning ausbreite , hier zwei grundlegende Fragen .

Wie läuft das öffnen einen mappe ab , welche aktionen werden ausgeführt ?

Werden die Tabellenfunctionen schon ausgefürt noch bevor das ereigniss " Dokument öffnen " ein Macro starten kann ?

gruß frank

Nach oben