ordner mit hilfe von Macro öffnen (Windows)
Moderator: Moderatoren
ordner mit hilfe von Macro öffnen (Windows)
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
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
Re: ordner mit hilfe von Macro öffnen (Windows)
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)
Gruß
Stephan
Re: ordner mit hilfe von Macro öffnen (Windows)
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
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)
dann ist, sofern der Code GENAUSO ist wie Du ihn gepostet hast UND die Benennung des Textfeldes stimmt, sehr wahrscheinlich das falsche ThisComponent referenziert.Msgbox oForm.hasByName(sPathField) ergenbiss ist False
Unter diesen Umständen dürfte die Rückgabe von:
Code: Alles auswählen
Msgbox ThisComponent.CurrentController.Frame.title
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)
z.B. sollte gehen (wenn meine Fehlervermutung zutrifft):Notfalls müsste man halt per Code das richtige Fenster erst suchen
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
Gruß
Stephan
Re: ordner mit hilfe von Macro öffnen (Windows)
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
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)
dann weiß ich nicht woran es liegtLeider wieder die oben genannte Fehlermeldung.
Den wahrscheinlichen Fehler, eine falsche Benennung des Textfeldes hatte ich ja bereits erwähnt.
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 SchleifeMsgbox ThisComponent.CurrentController.Frame.title bringt die richtigen Daten
Gruß
Stephan
Re: ordner mit hilfe von Macro öffnen (Windows)
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
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)
nö, danke.Aber wegen Vertraulichkeit nur als PM
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
Code: Alles auswählen
For i = 0 To oDoc.drawpage.forms.getbyindex(0).Count - 1
Msgbox oForm.getByindex(i).Name
Next i
Gruß
Stephan
Re: ordner mit hilfe von Macro öffnen (Windows)
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.
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.
- Dateianhänge
-
- 2.png (9.17 KiB) 4231 mal betrachtet
-
- Bild 1
- 1.png (18.96 KiB) 4231 mal betrachtet
Re: ordner mit hilfe von Macro öffnen (Windows)
Ich denke das Makro produziert eine Fehlermeldung, dazu muss es aber laufen.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.
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