datenbankformular mit schaltfläche (link) zu zusatzdokument
Moderator: Moderatoren
datenbankformular mit schaltfläche (link) zu zusatzdokument
Hi, ich war bis vor kurzem nur Anwender, also von Makroprogramierung keine Ahnung,
aber jetzt habe ich in einem Datenbankformular eine Schaltfläche Dokumentation erstellt,
mit der man zu dem entsprechenden Dokument (Datenbeschreibung, Messkurve usw.) über einen Link springen kann.
So zu mindestens der Plan, leider musste ich fesstellen, das man hierzu ein Makro braucht.
Wer kann mir helfen und wenn man eine Makroprogramierung gefunden hat, wie ist sie dann einzubinden.
viele Grüße
Rübli
aber jetzt habe ich in einem Datenbankformular eine Schaltfläche Dokumentation erstellt,
mit der man zu dem entsprechenden Dokument (Datenbeschreibung, Messkurve usw.) über einen Link springen kann.
So zu mindestens der Plan, leider musste ich fesstellen, das man hierzu ein Makro braucht.
Wer kann mir helfen und wenn man eine Makroprogramierung gefunden hat, wie ist sie dann einzubinden.
viele Grüße
Rübli
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Hallo Rübli,
Du musst also ein Makro erstellen:
Extras → Makro → Makros verwalten → LibreOffice Basic (oder OpenOffice Basic) → DeinDatenbankname.odb → Neu → Modul
Alles, was dann erscheint (Sub Main ...) kann gelöscht werden. Das obige Makro reicht. Mit dem kleinen Unterschied, dass der Pfad natürlich (auch in der Schreibweise) zu Deinem Rechner passen muss. Bei mir ginge das so nicht, weil ich kein Windows-Betriebssystem hier habe.
Das Makro rufst Du in dem entsprechenden Formular durch einen Button auf. Gehe auf die Eigenschaften des Buttons (rechter Mausklick, Kontrollfeld → Ereignisse → Aktion ausführen. Dort auf den Button mit den drei Punkten [...] und dann das Makro "DateiOeffnen" auswählen.
Das Formular abspeichern, wieder öffnen und Du kannst die Datei öffnen.
Gruß
Robert
Code: Alles auswählen
SUB DateiOeffnen
DIM vaDoc
DIM Arg()
DIM stUrl AS STRING
stUrl = ConvertToUrl("C:\Verzeichnis\meineDatei.odt")
vaDoc = StarDesktop.loadComponentFromURL(stUrl, "_blank", 0, Arg())
END SUB
Extras → Makro → Makros verwalten → LibreOffice Basic (oder OpenOffice Basic) → DeinDatenbankname.odb → Neu → Modul
Alles, was dann erscheint (Sub Main ...) kann gelöscht werden. Das obige Makro reicht. Mit dem kleinen Unterschied, dass der Pfad natürlich (auch in der Schreibweise) zu Deinem Rechner passen muss. Bei mir ginge das so nicht, weil ich kein Windows-Betriebssystem hier habe.
Das Makro rufst Du in dem entsprechenden Formular durch einen Button auf. Gehe auf die Eigenschaften des Buttons (rechter Mausklick, Kontrollfeld → Ereignisse → Aktion ausführen. Dort auf den Button mit den drei Punkten [...] und dann das Makro "DateiOeffnen" auswählen.
Das Formular abspeichern, wieder öffnen und Du kannst die Datei öffnen.
Gruß
Robert
-
- ***
- Beiträge: 52
- Registriert: Mi, 09.05.2007 23:25
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Hallo
Du kannst auch unter den Eigenschaften des Buttons
(rechter Mausklick, Kontrollfeld → Allgemein → Aktion → Dokument/Webseite öffnen)
auswählen, darunter neben URL den Button mit den drei Punkten [...] anklicken
und direkt dein gewünschtes Dokument anwählen.
Dann brauchst Du kein Makro.
Viele Grüße,
Hotti
Du kannst auch unter den Eigenschaften des Buttons
(rechter Mausklick, Kontrollfeld → Allgemein → Aktion → Dokument/Webseite öffnen)
auswählen, darunter neben URL den Button mit den drei Punkten [...] anklicken
und direkt dein gewünschtes Dokument anwählen.
Dann brauchst Du kein Makro.
Viele Grüße,
Hotti
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Hallo Hotti,
da habe ich dann einfach bestimmte Funktionen des Buttons nicht mehr im Kopf gehabt. Ist so natürlich viel praktischer.
Das Makro könnte dazu umgebaut werden, eventuell aus einem Dateiauswahlfeld den Pfad zu lesen und dann den Aufruf zu starten. Aber mit dem Button geht das natürlich für eine Datei wesentlich unkomplizierter.
Gruß
Robert
da habe ich dann einfach bestimmte Funktionen des Buttons nicht mehr im Kopf gehabt. Ist so natürlich viel praktischer.
Das Makro könnte dazu umgebaut werden, eventuell aus einem Dateiauswahlfeld den Pfad zu lesen und dann den Aufruf zu starten. Aber mit dem Button geht das natürlich für eine Datei wesentlich unkomplizierter.
Gruß
Robert
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Hi Hotti und Robert,
erstmal vielen Dank für die schnelle Antwort.
Das mit dem Butten und rechte Maustaste > Kontrollfeld > URL eingeben das geht nur im Entwurfsmodus des Formulares.
Ich habe aber verschiedene Datensätze mit unterschiedlichen Dokumenten.
Bei der Lösung mit URL im Kontrollfeld im Entwurfsmodus erscheint bei jeden Datensatz immer das selbe Dokument.
Die Schwierigkeit besteht darin, jedem Datensatz (Identnummer) den entsprechenden Link zu zuweisen.
Habt ihr hierfür eine Lösung
Gruß Karsten
erstmal vielen Dank für die schnelle Antwort.
Das mit dem Butten und rechte Maustaste > Kontrollfeld > URL eingeben das geht nur im Entwurfsmodus des Formulares.
Ich habe aber verschiedene Datensätze mit unterschiedlichen Dokumenten.
Bei der Lösung mit URL im Kontrollfeld im Entwurfsmodus erscheint bei jeden Datensatz immer das selbe Dokument.
Die Schwierigkeit besteht darin, jedem Datensatz (Identnummer) den entsprechenden Link zu zuweisen.
Habt ihr hierfür eine Lösung
Gruß Karsten
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Hallo Karsten,
Bei diesem Makro ist angenommen, dass das Formular den Namen "Formular" hat (nachsehen mit dem Formularnavigator - entsprechend ändern). Das Feld mit dem kompletten Link hat jetzt den Namen "Feld" - ebenfalls entsprechend ändern.
Der Wert aus dem Feld wird ausgelesen und das damit verbundene Dokument geöffnet.
Gruß
Robert
Du musst ja irgendwo den Link her haben. Entweder gespeichert oder durch ein Dateiauswahlfeld. Dieses Feld musst Du auslesen.rübli hat geschrieben: Die Schwierigkeit besteht darin, jedem Datensatz (Identnummer) den entsprechenden Link zu zuweisen.
Code: Alles auswählen
SUB DateiOeffnen
DIM vaDoc
DIM Arg()
DIM stUrl AS STRING
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
oForm=oDrawpage.Forms.getByName("Formular")
oFeld=oForm.getByName("Feld")
stUrl = ConvertToUrl(oFeld.getCurrentValue())
vaDoc = StarDesktop.loadComponentFromURL(stUrl, "_blank", 0, Arg())
END SUB
Der Wert aus dem Feld wird ausgelesen und das damit verbundene Dokument geöffnet.
Gruß
Robert
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
na - da hast Du (als Nicht-Makroprogrammierer) aber schon ein recht komplexes Problem zu lösen!rübli hat geschrieben:... von Makroprogramierung keine Ahnung
Mein Vorschlag, wenn Du Dich ernsthaft mit Makros beschäftigen möchtes, studiere die von Stephan freundlicherweise gesammelte Link-Liste zu Gebrauchsanweisungen auf der Forum-Seite Informationen zur StarBasic-Programmierung.
Um nun Dein Problem mal konkret anzugehen, hier mal einige Konzept-Vorschläge von mir:
Wenn ich Dich richtig verstanden habe, willst Du nur diverse Dokumente "per Knopfdruck" öffnen.
1. Die einfachste Methode wäre, direkt einen Dateimanager aufzurufen und damit dann gezielt das Dokument zu öffnen.
Willst Du aber dem Benutzer nur ganz spezielle Dokumente zum öffnen anbieten, musst Du Dich für eine statische Liste entscheiden.
2a. Setze ein Listenfeld in das Formular, welches alle Pfade zu Deinen diversen Dokumenten enthält.
2b. Erstelle ein kleines Makro, welches den ausgewählten Listenpunkt auslesen kann und automatisch ein Dokument öffnet.
2c. Weise einer Schaltfläche dieses Makro zu.
Je nach gewünschtem Luxus kannst Du die Aktion "Dokument öffnen" bereits beim Wechsel des Listeninhalts erreichen. Damit kann dann die Schaltfläche wegfallen.
2d. Weise dem Listenfeld beim Ereignis "Status geändert" dieses Makro zu
... soweit also die möglichen Konzepte - die Umsetzung erfordert allerdings schon ein bisschen Aufwand!
Methode 1 (öffnen per Dateimanager):
Das Formular benötigt dazu nur eine ganz normale Schaltfläche und ein kleines Makro - sonst nichts. Die Schaltfläche wird im Bearbeitungsmodus des Formulars eingesetzt und dann noch über seine Eigenschaften an das Makro verwiesen. Am einfachsten erreicht man die Kontrollfeldeigenschaften eines Steuerelements (hier z.B. die Schaltfläche) durch Anklicken mit der rechten Maustaste und Klick auf das Kontext-Menü "Kontrollfeld" = es erscheint ein Eigenschafts-Menü mit diversen Registerkarten. Bevor wir aber ein Makro der Schaltfläche zuweisen, muss es ja erst einmal gebaut werden! Wir unterbrechen hier und steigen also erst mal in die wunderbare Welt der Makroprogrammierung ein ...
Makro "OpenByFilePicker" bauen:
Auf Makro-Ebene (bitte exakt so vorgehen, wie es Dir schon RobertG erklärt hat) muss also erst mal ein neues Makro gebaut werden, welches den Dateimanager startet, dessen Aktionen abwartet, weiterverarbeitet und zum Schluss das gewählte Dokument automatisch öffnet. Ein solches Makro habe ich mal beispielhaft zusammengestellt und "OpenByFilePicker" genannt (sieh unten). Den Code einfach kopieren und in das Makro-Modul unter dem Verzeichnis "Standard", "Module1" einkopieren - speichern nicht vergessen!
Makro dem Schaltflächen-Ereignis "Aktion ausführen" zuweisen:
Nachdem das Makro programmiert ist und das Formular mit allen Änderungen gespeichert wurde muss abschließend noch einmal das Formular im Entwurfsmodus geöffnet werden und der Schaltfläche zum Öffnen von Dokumenten das soeben programmierte Makro beim Ereignis "Aktion ausführen" zugewiesen bekommen. Das geht so:
Die Kontrollfeld-Eigenschaften der Schaltfläche wie oben beschrieben öffen. Jetzt die letzte Registerkarte "Ereignisse" auswählen und hinter "Aktion ausführen" das Makro suchen. Achtung: Eintragungen von Hand geht hier nicht - es muss mit dem Knopf, rechts gesucht werden! Verwirrend ist nun, dass nochmals ein Fenster mit einer Auflistung der möglichen Ereignisse erscheint - egal - wir bleiben beim Ereignis "Aktion ausführen" und klicken jetzt auf die Schaltfläche "Makro".
Jetzt wird's spannend: Du musst das eben programmiertes Makro mit Namen "OpenByListSelect" finden und das ist nicht so ganz einfach! Wenn Du beim Programmieren exakt so vorgegangen bist, wie es RobertG erklärt, dann sollte sich im Verzeichnisbaum unterhalb Deines Formular-Dokuments (xyz.odb), im Verzeichnis "Standard" ein weiteres Unterverzeichnis mit Namen "Module1" befinden. In diesem Verzeichnis "Module1" sollte dann auch das Makro "OpenByListSelect" zu finden sein - auf "OK" klicken!
Nachfolgend nun das Makro, welches den Dateimanager startet und ein ausgewähltes Dokument öffnet:
Code: Alles auswählen
Sub OpenByFilePicker()
' Funktion zum oeffnen einer OO-Datei (oder sonstigen Datei) mit Hilfe des Dateimanagers.
' Kommentare (wie dieser) beginnen immer mit einem einfachen Hochkomma
' So funktioniert's:
' Eine Schaltflaeche muss unter seinen "Eigenschaften", Registerkarte "Ereignisse"
' dieses Makro in der 2. Zeile bei "Aktion ausfuehren" zugewiesen bekommen.
' Einige wichtige System- und Objekt-Variablen bereitstellen:
Dim i As Integer, GotItAsURL As Boolean, sStartPath As String, aFilesCollection() As String
Dim sDocURL As String, sPickerTitle As String, oFilePicker As Object, oDocument As Object
Dim aFileProps() as new com.sun.star.beans.PropertyValue
' Array, d.h. eine Variable mit n Elementen, vordefinieren (hier jeweils 4 Elemente von Nr. 0 - 3)
' um spaeter mehrere Dateifilter fuer den Dateimanager festlegen zu koennen:
Dim FilterDescriptn(3) As String, FilterExtension(3) As String
' Den Start-Pfad festlegen (hier beispielhaft der Pfad zu "Eigene Dateien"):
' Lokales Benutzerprofil (Standard), entnommen der WINDOWS-Umgebungsvariable %USERPROFILE%:
sStartPath = Environ("USERPROFILE") & "\Eigene Dateien"
' Falls die "Eigenen Dateien" im Netzwerk ausgelagert wurden, geht's nur so:
'sStartPath = Environ("HOMEDRIVE") & Environ("HOMEPATH")
' Oder einfach statisch - das kann natuerlich dann alles moegliche sein:
' sStartPath = "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien"
' Dateifilter festlegen (werden als Auswahl im Dateimanager angeboten):
FilterDescriptn(0) = "Writer-Textdokumente"
FilterDescriptn(1) = "Calc-Tabellendokumente"
FilterDescriptn(2) = "Impress-Präsentationen"
FilterDescriptn(3) = "Alle Datei-Typen"
FilterExtension(0) = "*.odt"
FilterExtension(1) = "*.ods"
FilterExtension(2) = "*.odp"
FilterExtension(3) = "*.*"
' Fenster-Titel des Dateimanagers festlegen:
sPickerTitle = "Wählen Sie die zu öffnende Datei ..."
' Diese Variable dient nur als Schalter, fuer den Fall dass
' der Dateimanager bereits URL-kodierte Pfade liefert
' (macht er unter WINDOWS n i c h t ! )
GotItAsURL = False
' Das Objekt zum WINDOWS-Dateimanager bereitstellen:
oFilePicker=createunoservice("com.sun.star.ui.dialogs.FilePicker")
' Die Anzahl der Datei-Filter wird durch die Array-Groesse bestimmt
' und diese Filter werden nun nacheinander dem Dateimanager uebergeben:
For i = 0 To UBound(FilterDescriptn)
oFilePicker.appendFilter(FilterDescriptn(i), FilterExtension(i))
Next
' Der Start-Pfad wird uebergeben:
oFilePicker.DisplayDirectory = sStartPath
' Der Fenster-Titel wird uebergeben:
oFilePicker.Title = sPickerTitle
' Nur wenn der Dateimanager korrekt gestartet und wieder beendet wurde ...
If oFilePicker.execute() Then
' ... kann der gewaehlte Dateiname eingelesen werden:
aFilesCollection = oFilePicker.getFiles()
' Je nach oben festgeleter Schalter-Einstellung wird URL-kodiert:
If GotItAsURL = True Then
sDocURL = aFilesCollection(0)
Else
sDocURL = ConvertToUrl(aFilesCollection(0))
EndIf
Else
' ... ansonsten war der Dateimanager offenbar abgebrochen worden:
MsgBox "Sie haben keine Datei gewählt - also passiert auch nix!", MB_ICONEXCLAMATION, "Der Dateimanager wurde abgebrochen!"
sDocURL = ""
End If
' Objekt zum Dateimanager loeschen:
oFilePicker.Dispose()
' Nur wenn der Dateipfad korrekt eingelesen wurde, wird die Datei geöffnet:
If sDocURL <> "" Then
oDocument = StarDesktop.loadComponentFromURL(sDocURL, "_blank", 0, aFileProps() )
EndIf
' Die Zuweisung des Oeffnen-Prozesses an die Objektvariable "oDocument"
' koennte auch entfallen - sie ermoeglicht aber weitere Aktionen mit dem
' geoeffneten Dokument, falls so etwas spaeter mal gebraucht werden sollte.
End Sub
Ein "Listenfeld" darf nicht mit "Kombinationsfeld" verwechselt werden! Nur mit einem Listenfeld können mehrere, unveränderliche Werte als Liste bereitgestellt werden. Außerdem müsssen unbedingt die Kontrollfeld-Eigenschaften geprüft bzw. korrekt eingestellt werden.
- Für das von mir (unten) bereitgestellte Makro muß das Listenfeld den Namen "URLSelector" bekommen.
- Die Eigenschaft "Aufklappbar" muß auf "Ja" eingestellt werden - sonst erscheint die Liste wie ein normales Eingabefeld und ist für unseren Zweck nicht geeignet.
- Hinter "Mehrfachselektion" muß die Eigenschaft "Nein" eingestellt sein.
Jetzt haben wir ein funktionstüchtiges Listenfeld!
Es gibt 2 Möglichkeiten, ein Listenfeld zu befüllen: Entweder manuell im Formular-Entwurf oder per Makro, welches aber dann beim Ereignis "Dokument öffnen" des Formulars zugewiesen werden muss (Weiter unten beschreibe ich noch, wie das geht).
Werte manuell in die Listbox eintragen::
Kontrollfeld-Eigenschaften, Registerkarte "Allgemein": Dort findet man auch die Eigenschaft "Listen-Einträge". In dieses Eingabefeld kann man Werte zeilenweise eintragen. Um eine neue Zeile zu erzeugen, muss die Umschalttaste (SHIFT) zusammen mit der Zeilenschalten (CR) gedrückt werden.
So kann man nun Zeile für Zeile die Listbox (z.B. mit Deinen Pfad-Angaben zu den Dokumenten) befüllen.
Als letztes noch mal schnell auf der Registerkarte "Daten" prüfen, ob hinter "Art des Listeninhalts" die Funktion "Werteliste" eingestellt ist. Ansonsten wird auf dieser Registerkarte nichts weiter eingestellt und auch keine Daten eingetragen (wie gesagt: Die Daten werden auf der Registerkarte "Allgemein" eingetragen, sonst nirgends) - wir sind fertig!
Makro "OpenByListSelect" bauen:
Wie unter Punkt 1 schon erklärt, muss sich auch dieses Makro im Verzeichnis "Standard", "Module1" befinden, damit Du es leichter finden kannst. Jetzt wird also ein weiteres Makro gebaut, welches den vom Benutzer ausgewählten Wert der Listbox automatisch ausliest und weiter verarbeitet. Ein solches Makro habe ich mal beispielhaft zusammengestellt und "OpenByListSelect" genannt (sieh unten) - einfach den Code kopieren und im Module1 einfügen - speichern nicht vergessen!
2c. Makro dem Ereignis "Aktion ausführen" zuweisen:
Damit das Makro beim Anklicken einer Schaltfläche startet, muß diese Schaltfläche beim Ereignis "Aktion ausführen" das Makro aufrufen. Gleiche Vorgehensweise wie oben schon beschrieben.
2d. Makro dem Ereignis "Status geändert" der Listbox zuweisen:
Die Methode erfodert keine zusätzliche Schaltfläche, allerdings sollte dann die Listbox auch keinen Standard-Eintrag beim Öffnen des Formulars besitzen (weil sie sonst möglicherweise vom Benutzer nicht aufgeklappt wird und nix weiter passiert!)
Damit das Makro beim Aufklappen/Auswählen der Listbox automatisch startet, muß das Listenfeld jetzt beim Ereignis "Status geändert" das Makro aufrufen. Gleiche Vorgehensweise wie oben schon beschrieben.
Nachfolgend nun das Makro, welches einen gewählten Listeneintrag ausliest und damit das Dokument öffnet:
Code: Alles auswählen
Sub OpenByListSelect()
' Funktion zum automatischen Auslesen einer aktuell gewaehlten Listenfeld-
' Zeile und zum unmittelbarem Oeffnen des dort vorgefundenen Pfades.
' Kommentare (wie dieser) beginnen immer mit einem einfachen Hochkomma
' So funktioniert's:
' a) Per separater Schaltflaeche:
' Die Schaltflaeche muss unter seinen "Eigenschaften", Registerkarte "Ereignisse"
' dieses Makro in der 2. Zeile bei "Aktion ausfuehren" zugewiesen bekommen.
' b) Automatisch beim Wechseln des Listeneintrags:
' Das Listenfeld muss unter seinen "Eigenschaften", Registerkarte "Ereignisse"
' dieses Makro in der 3. Zeile bei "Status geaendert" zugewiesen bekommen.
' Hinweis:
' Es wird angenommen, dass nur ein gleichzeitig geoeffnetes Formular
' und darin ein Listenfeld mit dem Namen "URLSelector" existiert.
' Als erstes muessen einige Variablen vordimensioniert werden:
Dim oForm As Object, oListBox As Object, oDocument As Object
Dim aFileProps() as new com.sun.star.beans.PropertyValue
Dim sSelectText As String, sDocURL As String
' Dann werden die notwendigen Objekte bereitgestellt,
' um die Listbox ansprechen zu koennen:
oForm = ThisComponent.Drawpage.forms(0)
oListBox = oForm.getByName("URLSelector")
' Hier wird der aktuell ausgewaehlte Text aus der Listbox gelesen:
sSelectText = oListBox.CurrentValue
' Der Text (= Pfad zum Dokument) wird jetzt plattformuebergreifend konvertiert:
sDocURL = ConvertToUrl(sSelectText)
' Die konvertierte Pfadangabe "sDocURL" wird erst mal auf Vorhandensein geprüft ...
If Not FileExists(sDocURL) Then
' ... und eine Meldung ausgegeben, falls nix gefunden:
MsgBox "Datei '" & sSelectText & "' existiert nicht!", MB_ICONSTOP, "Vorgabenliste falsch!"
Else
' ... oder eben das Dokument geoeffnet:
oDocument = StarDesktop.loadComponentFromURL(sDocURL, "_blank", 0, aFileProps() )
EndIf
' Die Zuweisung des Oeffnen-Prozesses an die Objektvariable "oDocument"
' koennte auch entfallen - sie ermoeglicht aber weitere Aktionen mit dem
' geoeffneten Dokument, falls so etwas spaeter mal gebraucht werden sollte.
End Sub
Hierbei ist schon eine Aktion beim Öffnen des Formulars gefragt, welche das Listenfeld befüllt noch bevor das Formular angezeigt wird. Natürlich kann auch das wieder von einem Makro erledigt werden, welches wir aber erst einmal bauen müssen.
Makro "FillListBox" bauen:
Wie unter Punkt 1 schon erklärt, muss sich auch dieses Makro im Verzeichnis "Standard", "Module1" befinden, damit Du es leichter finden kannst. Jetzt wird also ein Makro gebaut, welches automatisch diverse Werte in die Listbox schreibt. Ein solches Makro habe ich mal beispielhaft zusammengestellt und "FillListBox" genannt (sieh unten) - einfach den Code kopieren und im Module1 einfügen - speichern nicht vergessen!
Makro dem Ereignis "Dokument öffnen" zuweisen:
Damit dieses Makro schon während dem Öffnen des Formulars gestartet werden, muß in der Bearbeituns-Modus des Formulars, unter dem Menü "Extras/Anpassen" die Registerkarte Ereignisse gesucht werden (Aufgepasst: Es geht jetzt um Ereignisse des Formulars und nicht um die einzelner Steuerelemente!). In dem Auswahlmenü gibt es an 6. Stelle das Ereignis "Dokument öffnen". Hier muss nun das Makro "FillListBox" angebunden werden - Vorgehensweise wie oben beschrieben.
Wenn die Methode zum automatischen Befüllen bevorzugt wird, darf natrülich die Werteliste der Listbox selbst (unter Kontrollfeld-Eigenschaften "Listen-Einträge") keine Einträge enthalten - sonst gibts Durcheinander!
Nachfolgend nun das Makro, welches automatisch ein Listenfeld beim Öffnen des Formulars mit Werten befüllt:
Code: Alles auswählen
Sub FillListBox
' Funktion zum Befuellen eines Listenfeldes mit diversen Werten
' Kommentare (wie dieser) beginnen immer mit einem einfachen Hochkomma
' So funktioniert's:
' Das Formular muss im Hauptmenue unter "Extras/Anpassen"
' unter der Registerkarte "Ereignisse" dieses Makro
' in der 6. Zeile bei "Dokument öffnen" zugewiesen bekommen.
' Hinweis:
' Es wird angenommen, dass nur ein gleichzeitig geoeffnetes Formular
' und darin ein Listenfeld mit dem Namen "URLSelector" existiert.
' Als erstes muessen einige Objekt-Variablen vordimensioniert werden:
Dim oForm As Object, oListBox As Object
' Dann muss ein sogenannter Array, d.h. eine Variable mit n Elementen
' vordimensioniert werden. Die folgende Variable "yListEntries" ist ein
' solcher Array und bekommt hier 5 Elemente - Nr.0 bis Nr.4 - bereitgestellt:
Dim aListEntries(4) As String
' Jetzt werden die Elemente des Arrays mit Werten (Dokumenten-Pfade) befuellt:
aListEntries(0) = "C:\Verzeichnis\Datei1.odt"
aListEntries(1) = "C:\Verzeichnis\Datei2.odt"
aListEntries(2) = "C:\Verzeichnis\Datei3.odt"
aListEntries(3) = "C:\Verzeichnis\Datei4.odt"
aListEntries(4) = "C:\Verzeichnis\Datei5.odt"
' Dann werden die notwendigen Objekte bereitgestellt,
' um die Listbox im Formular ansprechen zu koennen:
oForm = ThisComponent.Drawpage.forms(0)
oListBox = oForm.getByName("URLSelector")
' Zum Schluss wird die Listbox mit den oben bereitgestellten Daten gefuellt:
oListBox.StringItemList = yListEntries()
' Bei Bedarf kann man auch noch einen Standard-Eintrag der Listbox einstellen
' Hier wird beispielhaft immer der 3. Listenpunkt (d.h. Array-Nr. 2) vorgewaehlt:
' oListBox.DefaultText = yListEntries(2)
' ... das war's !
End Sub
Viel Erfolg!
Gruß: ejomi (der heute keine Lust hat zu arbeiten und stattdessen lieber Romane schreibt)
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Erstmal vielen Dank für die schnelle und super Hilfe.
Du hast 2 Möglichkeiten angeboten.
Methode 1:
- Schaltfläche mit Link zu Dateimanager. Dort kann man sich selber den richtigen zusätzlichen Datensatz selber raus suchen.
Methode 2:
- aufklappbares Listenfeld mit den ensprechenden Links zum entsprechenden Datensatz
Realisierung für meine Datenbank:
- Bei der Menge von zusätzlichen Datensätzen auf die ich zugreifen möchte, würde bei der Methode 2 das Formular "gesprengt" werden.
Deshalb bevorzuge ich die Variante 1.
Ideal wäre es natürlich, wenn man in einen Formular zu je einen Datensatz einen Link hätte.
Und wenn man diesen dann noch über das Formular eingeben könnte, wäre das genial.
Vielleicht kann man dazu ein Makro schreiben. Da ich aber erst Anfäger bin, ist das für mich einfach noch zu schwierig.
Aber erstmal vielen Dank
Karsten
Du hast 2 Möglichkeiten angeboten.
Methode 1:
- Schaltfläche mit Link zu Dateimanager. Dort kann man sich selber den richtigen zusätzlichen Datensatz selber raus suchen.
Methode 2:
- aufklappbares Listenfeld mit den ensprechenden Links zum entsprechenden Datensatz
Realisierung für meine Datenbank:
- Bei der Menge von zusätzlichen Datensätzen auf die ich zugreifen möchte, würde bei der Methode 2 das Formular "gesprengt" werden.
Deshalb bevorzuge ich die Variante 1.
Ideal wäre es natürlich, wenn man in einen Formular zu je einen Datensatz einen Link hätte.
Und wenn man diesen dann noch über das Formular eingeben könnte, wäre das genial.
Vielleicht kann man dazu ein Makro schreiben. Da ich aber erst Anfäger bin, ist das für mich einfach noch zu schwierig.
Aber erstmal vielen Dank

Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
... nichts ist schwierig: Einfach mal ausprobieren und "learning by doing"!rübli hat geschrieben:Da ich aber erst Anfäger bin, ist das für mich einfach noch zu schwierig.
Noch was zum Schluss:
Du sprichst andauernd von einem "Datensatz", den du angeblich mit einem Dateimanager öffnen willst - meist aber doch sicher "Dokument"!
Eine Weisheit, die für alle Bereiche des Lebens zutrifft: Richtiges Denken setzt richtiges Sprechen voraus!
Ich meine damit das Bezeichnen und Benennen von Dingen um dann damit auch gedanklich fehlerfrei "spielen" zu können. Um mit Anderen unmissverständlich kommunizieren zu können - z.B. auch in diesem Forum - ist das sowieso unabdingbar!
Dazu noch einmal ein kleiner Exkurs "Datensatz" vs. "Dokument":
Ein "Dokument " ist immer eine in sich geschlossene Datei. Die Bezeichnung ist vielleicht eine schlechte Übersetzung aus dem Englischen, weil es sich hierbei nicht nur um ein Dokument im klassischen Sinn handelt (also z.B. ein Schrift-Dokument). Vielmehr ist damit in der digitalen Welt alles gemeint, was sich irgendwie zusammenhängend (als Datei) in einem normierten Format auf einem digitalen Speichermedium befindet. Es kann sich dabei um ein Text-Dokument, eine Arbeitsmappe aus einer Tabellekalkulation, eine Grafik, ein Video, eine Präsentation und noch viel, viel mehr handeln!
Ich gehe sogar so weit, eine ODB-Datei (also eine OpenOffice Datenbank) als "Dokument" zu bezeichnen, solange diese Datei nicht mit einer separaten, externen Datenbank-Server verbunden ist. Standardmäßig integriert OpenOffice ja eine eigene Datenbank (HSQL) mit in die ODB-Datei hinein. In diesem Fall ist also die ODB-Datei völlig unabhängig und kann dann ebenfalls durchaus als "Dokument" bezeichnet werden.
Ein "Datensatz" hingegen ist immer nur ein kleiner Bestandteil einer Datenbank und wird meistens als Zeile einer Tabelle dargestellt (die "Tabelle" sei dabei die Datenbank). Die Tabelle hat diverse Spalten, deren Zweck vorher individuell vereinbart werden muss. Bei einer Adressdatenbank könnten das z.B. die Spalten "Name", "Straße", "PLZ", "Ort" sein. In dem Fall hätten wir also eine Tabelle (= Datenbank) mit 4 Spalten und einer Anzahl "n" von Zeilen (= Datensätzen). Die Adresse einer Person wird nun über die Zeilen-Nr. "n" angesprungen und die ganze Zeile in unterschiedliche "Felder" eingelesen. Die Inhalte dieser "Felder" sind bereits durch die Tabellenspalten vordefiniert worden: Es handelt sich in diesem Beispiel um "Name", "Straße", "PLZ" und "Ort". Die in der richtigen Reihenfolge ausgelesenen "Felder" entsprechen also dem kompletten Inhalt eines Datensatzes und können dann einzeln, programmtechnisch weiter verarbeitet werden.
Sooo - das war nur mal so ein kleiner Erklärungsansatz - natürlich kann eine Datenbank noch wesentlich komplexere Dinge. Dazu verweise ich nochmals ausdrücklich auf die Link-Sammlung von Stephan, wie in meinem vorherigen Thread bereits dargelegt. Du wirst wohl oder übel um ein bisschen Eigenstudium nicht drum herum kommen. Keinesfalls kannst Du erwarten, dass hier irgend jemand im Forum Deine Arbeit erledigt: Du musst schon ein bisschen selbst ran!
Ich habe Dir hier lediglich einen kleinen Einstieg verschaffen wollen, weil ich aus eigener bitterer Erfahrung weiß, wie schwierig gerade die ersten Schritte sind, ehe man die teils doch sehr kryptischen Erläuterungen zum Programmieren versteht - ganz zu schweigen von dem "Fach-Chinesisch" einiger Spezialisten!
Mehr kann ich aber an dieser Stelle wirklich nicht mehr tun.
In diesem Sinne:
Viel Erfolg wünscht "ejomi"!
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Hallo Karsten,
ich habe mich daran erinnert, dass wir eine ähnliche Problemstellung im LibreOffice-Forum hatten. Da ging es (in einem eigentlich ganz anderen Thread) um die Öffnung von Acrobat-Reader-Dateien. Hier der Link: http://www.libreoffice-forum.de/viewtop ... =10#p14352
Ich hatte dazu ein Formular sowie ein entsprechendes Makro erstellt und zusammen in eine Datenbankdatei (allerdings ganz ohne Tabellen) gesteckt. Diese Datei hänge ich einmal an.
Gruß
Robert
ich habe mich daran erinnert, dass wir eine ähnliche Problemstellung im LibreOffice-Forum hatten. Da ging es (in einem eigentlich ganz anderen Thread) um die Öffnung von Acrobat-Reader-Dateien. Hier der Link: http://www.libreoffice-forum.de/viewtop ... =10#p14352
Ich hatte dazu ein Formular sowie ein entsprechendes Makro erstellt und zusammen in eine Datenbankdatei (allerdings ganz ohne Tabellen) gesteckt. Diese Datei hänge ich einmal an.
Gruß
Robert
- Dateianhänge
-
- Datei_oeffnen.odb
- (36.95 KiB) 306-mal heruntergeladen
Re: datenbankformular mit schaltfläche (link) zu zusatzdokum
Hallo Robert,
erst mal vielen Dank für deine Mühe. Die Antwort kommt zwar spät aber besser als nie.Ich habe viele deiner Tips verwenden können.
ejomi hatte mir auch geantwortet. Mit der Hilfe von deinen Tipps und des Beispielmakros (Methode 1) von ejomi konnte ich für meine Datenbank
das benötigte Makro erstellen. Momentan läuft dies nur auf meinem Computer. In Zukunft soll das alles über Netzwerk laufen können. Dazu hat mir ejomi ein paar Tips gegeben und ich hoffe, dass es mir gelingt dies umzusätzen. Dafür bin ich sehr dankbar.
Noch mal etwas zu der Definition " Datensätze". Ich verstehe es so.
Es besteht eine Tabelle mit vielen Zeilen (Datensätze). Die Spalten der Tabelle enthalten alle Eigenschaften und nur für den jeweiligen Datensatz (Zeile) werden die entsprechenden ausgesucht.
Wenn ich jetzt detailiertere Information erfaheren möchte, habe ich im Formular eine Schaltfläche Dokumentation (Makro) angelegt. Hier ist es jetzt möglich über den Dateimanager die entsprechende Detailinformation aufzurufen.
Gruß Karsten
erst mal vielen Dank für deine Mühe. Die Antwort kommt zwar spät aber besser als nie.Ich habe viele deiner Tips verwenden können.
ejomi hatte mir auch geantwortet. Mit der Hilfe von deinen Tipps und des Beispielmakros (Methode 1) von ejomi konnte ich für meine Datenbank
das benötigte Makro erstellen. Momentan läuft dies nur auf meinem Computer. In Zukunft soll das alles über Netzwerk laufen können. Dazu hat mir ejomi ein paar Tips gegeben und ich hoffe, dass es mir gelingt dies umzusätzen. Dafür bin ich sehr dankbar.
Noch mal etwas zu der Definition " Datensätze". Ich verstehe es so.
Es besteht eine Tabelle mit vielen Zeilen (Datensätze). Die Spalten der Tabelle enthalten alle Eigenschaften und nur für den jeweiligen Datensatz (Zeile) werden die entsprechenden ausgesucht.
Wenn ich jetzt detailiertere Information erfaheren möchte, habe ich im Formular eine Schaltfläche Dokumentation (Makro) angelegt. Hier ist es jetzt möglich über den Dateimanager die entsprechende Detailinformation aufzurufen.
Gruß Karsten