Seite 1 von 1

ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 11:22
von ja18
Hallo
Ich habe ein Problem mit einem Makro welches unter hsqldb einwandfrei läuft und unter mysql nicht.
Es soll aus einer Zeile den Pfad auslesen und den Pfad öffnen wen ein Button angeklickt wird.


Sub Main
Dim sPath as String 'Path weil es der Pfad ist. s weil es ein String ist. Deshalb zusammengesetzt sPath
Dim oForm as Object 'o = Object Form = Formular Deshalb oForm
Dim sPathField as String 'Das ist der Name des Feldes, wo der String drinsteht. Könnte man auch fest verdrahten.

oDoc = ThisComponent 'Das ist immer so eine Muss-Zeile
oForm = oDoc.drawpage.forms.getbyindex(0) 'Drawpage des Formulars. Auch immer so eine Musszeile.
sPathField = "txtAblage Ordner" 'Feldname des Feldes wo der Folder drinsteht. Könnte genauso "test123" heißen
'Muss halt im Formular entsprechend angepasst sein

'Das Feld auslesen + zur Kontrolle anzeigen
sPath = oForm.getByName(sPathField).text
MsgBox "Der Pfad ist " + sPath

'Jetzt den Explorer öffnen:
shell "explorer /e," & sPath, 1
End Sub

Wenn dieses Makro unter Mysql gestartet wird kommt eine Fehlermeldung:
BASIC-Lauftzeitfehler.
Es ist eine Ausnahme aufgetreten

Kann mir jemand damit helfen?

Type: com.sun.star.container.noSuchElementException
Unbenannt.png
Unbenannt.png (44.75 KiB) 4325 mal betrachtet

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 11:34
von Stephan
Wenn dieses Makro unter Mysql gestartet wird


Was meint das? Wie kann man ein Makro "unter" Mysql starten?


Was würde ich tun?

zunächst einmal prüfen ob das Textfeld richtig referenziert wird, dazu genügt ein:

Code: Alles auswählen

Msgbox oForm.hasByName(sPathField)
wenn dort nicht "True" angezeigt wird, wird nicht das richtige Feld referenziert. Die Annahme für die Ursache wäre wohl das das ThisComponent-Objekt nicht das richtige Formular referenziert.


Gruß
Stephan

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 11:48
von ja18
Ich habe zwei Datenbanken, eine die in Benutzung ist (Mysql) und eine die eigentlich gleich ist nur nicht mit Daten gefüttert wird zu rumprobieren unter (Hsqldb)

wenn ich etwas neues probiere, dann vorerst unter HSQLDB und wenn es funktioniert wird es in MYSQL Datenbank eingebaut.

Msgbox oForm.hasByName(sPathField) ergenbiss ist False

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 12:07
von Stephan
Msgbox oForm.hasByName(sPathField) ergenbiss ist False
dann ist, sofern der Code GENAUSO ist wie Du ihn gepostet hast UND die Benennung des Textfeldes stimmt, sehr wahrscheinlich das falsche ThisComponent referenziert.

Unter diesen Umständen dürfte die Rückgabe von:

Code: Alles auswählen

Msgbox ThisComponent.CurrentController.Frame.title 
nicht dem Titel des gewünschten Formulares entsprechen.


Um das richtige ThisComponent zu referenzieren musst Du prüfen was für Formulare und/oder Dokumente in welcher Reihenfolge geöffnet und geschlossen werden (ich weiß nicht wie ich das besser erklären soll).

Notfalls müsste man halt per Code das richtige Fenster erst suchen, nur wirklich nötig ist das nicht, wenn der Makroablauf 'sauber' programmiert ist. Da ich den Gesamtcode nicht kenne, dann ich dazu nichts Konkretes sagen.


Gruß
Stephan

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 12:27
von Stephan
Notfalls müsste man halt per Code das richtige Fenster erst suchen
z.B. sollte gehen (wenn meine Fehlervermutung zutrifft):

Trage bei "Dein gesuchter Fenstertitel" den Titel des gewünschten Formulars/Formularfensters ein.

Code: Alles auswählen

Sub Main
Dim sPath as String 'Path weil es der Pfad ist. s weil es ein String ist. Deshalb zusammengesetzt sPath
Dim oForm as Object 'o = Object Form = Formular Deshalb oForm
Dim sPathField as String 'Das ist der Name des Feldes, wo der String drinsteht. Könnte man auch fest verdrahten.

alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
   aktuell = elemente.NextElement()
   If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
      if aktuell.CurrentController.frame.title = "Dein gesuchter Fenstertitel" Then
      	oDoc = aktuell 'Das ist immer so eine Muss-Zeile
 		oForm = oDoc.drawpage.forms.getbyindex(0) 'Drawpage des Formulars. Auch immer so eine Musszeile.
 		sPathField = "txtAblage Ordner" 'Feldname des Feldes wo der Folder drinsteht. Könnte genauso "test123" heißen
 		'Muss halt im Formular entsprechend angepasst sein
 
		 'Das Feld auslesen + zur Kontrolle anzeigen
		 sPath = oForm.getByName(sPathField).text
		 MsgBox "Der Pfad ist " + sPath
		
		 'Jetzt den Explorer öffnen:
		 shell "explorer /e," & sPath, 1
      End if
   end if
Loop

End Sub
aber das ist, wie gesagt, unnötig wenn dein Makro/Makros 'sauber' programmiert ist/sind.


Gruß
Stephan

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 12:50
von ja18
Hallo
habe deine Anweisungen ausgeführt und den Code ergänzt

Sub Main
Dim sPath as String 'Path weil es der Pfad ist. s weil es ein String ist. Deshalb zusammengesetzt sPath
Dim oForm as Object 'o = Object Form = Formular Deshalb oForm
Dim sPathField as String 'Das ist der Name des Feldes, wo der String drinsteht. Könnte man auch fest verdrahten.

alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
aktuell = elemente.NextElement()
If HasUnoInterfaces( aktuell, "com.sun.star.frame.XModel" ) Then
if aktuell.CurrentController.frame.title = "ktecdb.odb : Kundenbestellung - LibreOffice Base: Datenbankformulare" Then
oDoc = aktuell 'Das ist immer so eine Muss-Zeile
oForm = oDoc.drawpage.forms.getbyindex(0) 'Drawpage des Formulars. Auch immer so eine Musszeile.
sPathField = "txtAblage Ordner" 'Feldname des Feldes wo der Folder drinsteht. Könnte genauso "test123" heißen
'Muss halt im Formular entsprechend angepasst sein

'Das Feld auslesen + zur Kontrolle anzeigen
sPath = oForm.getByName(sPathField).text
MsgBox "Der Pfad ist " + sPath

'Jetzt den Explorer öffnen:
shell "explorer /e," & sPath, 1
End if
end if
Loop

End Sub

Leider wieder die oben genannte Fehlermeldung.
Bleibt immer an der gleichen Stelle hängen (Blaue Farbe)

Msgbox ThisComponent.CurrentController.Frame.title bringt die richtigen Daten

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 13:09
von Stephan
Leider wieder die oben genannte Fehlermeldung.
dann weiß ich nicht woran es liegt

Den wahrscheinlichen Fehler, eine falsche Benennung des Textfeldes hatte ich ja bereits erwähnt.
Msgbox ThisComponent.CurrentController.Frame.title bringt die richtigen Daten
das kann im vorliegenden Fall nicht anders sein denn der Fehler tritt ja innerhalb einer Sc hleife auf wo vorher der richtige Titel geprüft wurde, wäre der Titel falsch käme der Programmablauf erst garnicht in die Schleife



Gruß
Stephan

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 13:39
von ja18
Hallo
kann ich dir die Datenbank zur Verfügung stellen?
Diese wäre ohne Daten, das diese im Mysql am Server liegen, aber die Formulare und Abfragen u.s.w. wären bearbeitbar!
Da musstest du es ja sehen können oder?

Aber wegen Vertraulichkeit nur als PM

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 13:56
von Stephan
Aber wegen Vertraulichkeit nur als PM
nö, danke.

Wenn Du im richtigen Formular bist und die drawpage stimmt können es ja wohl nht soviele Steuerelemente sein, also gehe alle durch:

statt:

Code: Alles auswählen

sPath = oForm.getByName(sPathField).text
verwende zum Testen

Code: Alles auswählen

For i = 0 To oDoc.drawpage.forms.getbyindex(0).Count - 1
	Msgbox oForm.getByindex(i).Name
Next i
dabei muss der Name des gewünschten Feldes auftauchen, sonst ist etwas Größeres nicht in Ordnung.



Gruß
Stephan

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 16:16
von ja18
Ich habe es zum teil zum laufen gebracht.
Das Makro ist absolut in Ordnung so wie es gewesen ist.
Es liegt an dem Formular, und ob das Makro in einem Subform laufen soll oder nicht.
Im Bild Nr. 1 sieht man daß das Makro im Subform4 laufen soll, und das geht nicht, egal wohin der Schalter "btnAblage_Ordner" geschoben wird.
Im Bild Nr.2 Sieht man daß das Makro im MainForm läuft, und da geht's einwandfrei. (Da heißt der der Schalter "Öffne Ablage")

Was da noch geändert werden kann weis ich nicht.

Re: ordner mit hilfe von Macro öffnen (Windows)

Verfasst: Mi, 23.09.2015 17:05
von Stephan
Im Bild Nr. 1 sieht man daß das Makro im Subform4 laufen soll, und das geht nicht, egal wohin der Schalter "btnAblage_Ordner" geschoben wird.
Ich denke das Makro produziert eine Fehlermeldung, dazu muss es aber laufen.
Das der Schalter eigentlich nicht ursächlich sein kann ist ergibt sich irgendwie daraus das das Makro doch auch völlig ohne Schalter startbar ist.

Im Übrigen ist in den Screenshots sichtbar das das Textfeld beim nichtlaufenden' Makro offensichtlich "lblAblageOrdner" heißt und nicht wie die ganze Zeit benannt "lblAblage Ordner", denn so heißt es nur bei den funktionierenden Formular.


Gruß
Stephan