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 (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:
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:
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:
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