1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcode?!

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: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcode?!

Re: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcod

von MikeRo » Mo, 07.11.2011 21:13

DPunch hat geschrieben:Aloha
MikeRo hat geschrieben:Aber es ist doch ein Bug oder?
Nö.
Prozeduren benötgen den Zusatz "Call" nicht.
Vermutlich hast Du Deine Makros in unterschiedlichen Bibliotheken - rufst Du nun zuerst das Befragungsbogen-Makro auf, ist die Prozedur "Texte" aus dem Angebote-Makro noch nicht geladen und damit nicht bekannt. Das Makro sucht nun zuerst nach lokalen Variablen, dann nach öffentlichen Variablen und Prozeduren, dann global nach Variablen und Prozeduren mit dem Namen "Texte". Findet es nichts, wird "Texte" als neue, leere Variable initialisiert, so wie Du das offenbar ja auch willst.
Startest Du dagegen zuerst das Angebote-Makro, ist ab dem Zeitpunkt eine Prozedur "Texte" bekannt, die aufgerufen werden kann und auch aufgerufen wird in Deinem Fall.

Wenn Du die Variable "Texte" in der entsprechenden Prozedur via "Dim Texte" einfach deklarierst, sollte das Problem behoben sein.
Und ganz allgemein kannst Du und solltest Du solche Probleme (die ohne Erfahrung fast überhaupt nicht auf eigene Faust lösbar sind) umgehen, indem Du strikte Namenskonventionen für Deine Variablen und am Besten auch für Deine Funktionen / Prozeduren einhältst.
Nennst Du z.B. alle Variablen nach dem Schema "sTexte" für Strings, "oTexte" für UNO-Objekte, "aTexte" für Array etcetc, wird Dir so etwas nicht nochmal passieren.
Bennenst Du Funktionen z.B. mit dem Präfix "fn_", also "fn_Texte", und Prozeduren z.B. mit dem Präfix "pr_", also "pr_Texte", erst Recht nicht.
Die Namensgebung steht Dir dabei natürlich völlig frei, in erster Linie solltest Du selbst jederzeit wissen und Dir sicher sein können, womit Du da gerade im Quelltext arbeitest.
Das hab ich mir schon vorgenommen :) Und werde es in meinem nächsten Projekt auch umsetzen. Damit ich nie wieder solche Probleme habe. Und auch mal anfange sauber zu Programmieren. Schadet ja nicht. :) Danke noch mal.

Re: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcod

von DPunch » Mo, 07.11.2011 19:25

Aloha
MikeRo hat geschrieben:Aber es ist doch ein Bug oder?
Nö.
Prozeduren benötgen den Zusatz "Call" nicht.
Vermutlich hast Du Deine Makros in unterschiedlichen Bibliotheken - rufst Du nun zuerst das Befragungsbogen-Makro auf, ist die Prozedur "Texte" aus dem Angebote-Makro noch nicht geladen und damit nicht bekannt. Das Makro sucht nun zuerst nach lokalen Variablen, dann nach öffentlichen Variablen und Prozeduren, dann global nach Variablen und Prozeduren mit dem Namen "Texte". Findet es nichts, wird "Texte" als neue, leere Variable initialisiert, so wie Du das offenbar ja auch willst.
Startest Du dagegen zuerst das Angebote-Makro, ist ab dem Zeitpunkt eine Prozedur "Texte" bekannt, die aufgerufen werden kann und auch aufgerufen wird in Deinem Fall.

Wenn Du die Variable "Texte" in der entsprechenden Prozedur via "Dim Texte" einfach deklarierst, sollte das Problem behoben sein.
Und ganz allgemein kannst Du und solltest Du solche Probleme (die ohne Erfahrung fast überhaupt nicht auf eigene Faust lösbar sind) umgehen, indem Du strikte Namenskonventionen für Deine Variablen und am Besten auch für Deine Funktionen / Prozeduren einhältst.
Nennst Du z.B. alle Variablen nach dem Schema "sTexte" für Strings, "oTexte" für UNO-Objekte, "aTexte" für Array etcetc, wird Dir so etwas nicht nochmal passieren.
Bennenst Du Funktionen z.B. mit dem Präfix "fn_", also "fn_Texte", und Prozeduren z.B. mit dem Präfix "pr_", also "pr_Texte", erst Recht nicht.
Die Namensgebung steht Dir dabei natürlich völlig frei, in erster Linie solltest Du selbst jederzeit wissen und Dir sicher sein können, womit Du da gerade im Quelltext arbeitest.

Re: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcod

von MikeRo » Mo, 07.11.2011 17:33

Ich habe den Fehler gefunden.
Ich habe eine Variable die Texte Heißt und diese ruft auch ohne Call, die Prozedur des Angebot Programms auf.
Naja, jetzt weiß ich Bescheid. Aber es ist doch ein Bug oder? Kann man irgendwie OpenOffice beim Makrostart zurücksetzen?
Denn wenn ich neu starte, geht es ja, wie oben beschrieben.

Re: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcod

von MikeRo » Mi, 02.11.2011 21:14

Ich glaube ich weiß woran es liegen kann, ich habe in allen Makros die gleiche Prozedur DB
Welche jeweils die Verbindung zur Datenbank aufbaut!

Allem Anschein nach, bleibt die Variable oCon von den Angeboten bestehen und wird nicht vom Befragungsbogen überschrieben....
Ich werde nächste Woche mal versuchen einen Aufruf zur DB Prozedur in der Stammdaten Prozedur machen, anscheinend reicht ein einmaliger erster Aufruf in der Prozedur (Welche immer als erste startet) die nach den Lokalen sucht und in der man die Lokale auswählt nicht aus.

Bei den Angeboten habe ich in jeder Prozedur, die auf die Datenbank abfragt immer den Call auf DB, bei Befragungsbogen habe ich es weggelassen und daran wird es wohl liegen müssen.

Re: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcod

von DPunch » Mi, 02.11.2011 20:23

Aloha
oPrepStatement = oCon.prepareCommand(BlockUeberschrift,2) ' ================= Hier die Fehlermeldung, Objektvariable nicht belegt.
Bei diesem Wirrwarr und unvollständigem Code sind genaue Hinweise leider nicht möglich, aber am wahrscheinlichsten scheint, dass Du aus dem Befragungsbogen heraus irgendwo die Prozedur "Texte" aufrufst, dort ist oCon nicht mehr belegt, daher erhältst Du die Fehlermeldung und daher springt auch der Editor an diese Stelle.

Re: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcod

von MikeRo » Mi, 02.11.2011 18:22

Also.

Befragungsvogen Quellcodeteil, der per Button im Dialog gestartet wird.

Code: Alles auswählen

Sub StartBefragung
'On Error GoTo errHandler

	eListBoxAuswahl = oBefrag_Dialog.getControl("AusgabeLokal")
	aAuswahl = eListBoxAuswahl.SelectedItem
	
	If aAuswahl = "" Then
	MsgBox "Bitte eine Auswahl treffen!", 48, "Achtung!"
	Else
		LokalID = Left(aAuswahl,5)
		'LokalID = 41077

	oBefrag_Dialog.endexecute()
	Call StartBefragungsDialog
	End If	
Exit Sub	
errHandler:
MsgBox "Es ist ein Fehler aufgetreten" & chr(13) & "Bitte den Vorgang erneut starten.", 48, "Fehler!" 
oBefrag_Dialog.endexecute()
End Sub 
Hier der Call

Code: Alles auswählen

Sub StartBefragungsDialog

	AnzahlSeiten = 8
 	DialogLibraries.LoadLibrary("Befragungsbogen")
 	oDlg = createUnoDialog(DialogLibraries.Befragungsbogen.BefragungsBogenExecute)
 	Call Stammdaten
 	Schritt1
 	oDlg.execute
 	
End Sub
Hier der Call ;)

Code: Alles auswählen

Sub Stammdaten
	
	Abfrage = "SELECT ""id"", ""name"", ""strasse"", ""plz"" || ' ' || ""ort"" FROM ""public"".""outlet"" WHERE ""id"" = "& LokalID &""
   	oStatement = oCon.createStatement()
    oResult = oStatement.executeQuery(Abfrage)
           
           	IF NOT ISNULL(oResult) THEN
           	
		   		Do while oResult.Next 

	    		aEintrag = oDlg.getControl("LID")
    			aEintrag.text = " " & oResult.getString(1)
	    		aEintrag = oDlg.getControl("LName")
    			aEintrag.text = " " & oResult.getString(2)
	    		aEintrag = oDlg.getControl("LStraße")
    			aEintrag.text = " " & oResult.getString(3)
	    		aEintrag = oDlg.getControl("LOrt")
    			aEintrag.text = " " & oResult.getString(4)

           		Loop
	   
		   End If
End Sub
Programmteil in den Angeboten, der ne Fehlermeldung ausspuckt

Code: Alles auswählen

Sub Texte

 Dim aData(0)
 Dim aLine(0)
 Call SQL
 
      oPrepStatement = oCon.prepareCommand(BlockUeberschrift,2) ' ================= Hier die Fehlermeldung, Objektvariable nicht belegt. 
      oResult = oPrepStatement.executeQuery
      aColumns = oPrepStatement.Columns.ElementNames
      nColumnCount = UBound(aColumns)
      ReDim aLine(nColumnCount)
      ReDim aData(0)
      aData(0) = aColumns
      nUpperBoundary = 0

      Do While oResult.Next()
      nUpperBoundary = UBound(aData)+1
         
         ReDim Preserve aData(nUpperBoundary)
         
         	aBlock = oResult.getString(1) ' Block
         	bUeberschrift = oResult.getString(2) ' Überschrift
			
			LDS = LetzterDatensatz+nUpperBoundary
						           
         	BlockUber = oDoc.sheets.getByName("Angebot").getCellByPosition(0,LDS)
         	BlockUber.CharWeight = com.sun.star.awt.FontWeight.BOLD
			BlockUber.String = bUeberschrift

			Call TexteEinfuegen
			
	 Loop  

				LetzterDatensatz = LetzterDatensatz+nUpperBoundary+2

End Sub

Ich deklariere eigentlich nie wirklich Variablen, nur die, die Public sind.

Dim oBefrag_Dialog as Object
Dim DatabaseContext As Object
Dim DataSource As Object
Dim Zaehler AS Integer
Public eLokal, aAuswahl, LokalID, oCon

Den kompletten Quelltext würde den Rahmen sprengen, weil die Programme jeweils über tausend Programmcodezeilen haben.

Re: 1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcod

von komma4 » Mi, 02.11.2011 18:17

WELCHE Fehlermeldung bei WELCHEM statement?
WIE ist die Variable deklariert? In beiden Modulen?


Warum muss man sowas immer nachfragen?
Wenn wir Deinen Code nicht sehen, dann können wir nur raten...

1. Makro Fehlermeldung in unabhängigem 2. Makro Quellcode?!

von MikeRo » Mi, 02.11.2011 17:29

Hallo ich habe ein komisches Problem. Ich habe 3 Module Programmiert.

Angebote
Befragungsbogen
Standortlisten

Alle 3 Module sind unabhängig voneinander und eigenständige Programme (Alle Funktionieren ohne Probleme).

Das komische ist:

Wenn ich erst das Angebote Programm ausführe, dann beende und dann zu dem Befragungsbogen Programm wechsle (Im Openoffice Makroeditor), dieses dann starte, spuckt openoffice eine Fehlermeldung aus... nicht belegte variable, die allerdings im Quellcode von den Angeboten ist und nicht vom Befragungsbogen, zu dem wurde die Auswahl auf Angebote gewechselt und in den Angeboten ist das Modul aus dem Befragungsbogen?! Wenn ich openoffice komplett beende, wieder starte und dann zu erst den Befragungsbogen starte, geht alles ohne Probleme und auch das Befragungsbogen Modul ist aus den Angeboten wieder verschwunden. :shock: :shock: :shock:

Was ist da bitte los oder läuft falsch?

Nach oben