der meiste Dank hierbei gebührt Robert. Die für mich kniffligeren Dinge haben er (und F3K Total) gelöst. Von beiden habe ich viel gelernt, obwohl Sie das so gar nicht wissen.
Hallo,
ja, mir ist natürlich aufgefallen das ihr 3 fleißige Helfer seid. Von F3k Total verwende ich z.B. das search Makro.
Zur Version; Bei mir unter Windows 7 64bit läuft LibreOffice v3.5.4.2 ... ist für Windows die AKtuellste.
@Harald
Da klemmt irgendwas. Das Makro "DB-schliessen" inkl. "Frage für MsgBox", läßt Base ztw. abstürzen. Nicht immer, aber öfters. Beim Beenden durch das Makro erscheint ein Fenster mit weißem Inhalt, und nichts geht mehr. Da hilft dann nur noch der Taskmanager um LO zu entfernen.
Ich poste mal das komplette Makro-Script.:
Code: Alles auswählen
sub Search
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:RecSearch", "", 0, Array())
end sub
rem ######################################################################
Sub Symbolleisten_Ausblenden
DIM oFrame AS OBJECT
DIM oWin AS OBJECT
DIM oLayoutMng AS OBJECT
DIM aElemente()
oFrame = StarDesktop.getCurrentFrame()
oFrame.setTitle "Mein Formular" ' Titel des Formulars wird gesetzt
oWin = oFrame.getContainerWindow()
oWin.IsMaximized = true
oLayoutMng = oFrame.LayoutManager
aElemente = oLayoutMng.getElements()
FOR i = LBound(aElemente) TO UBound(aElemente)
IF aElemente(i).ResourceURL = "private:resource/toolbar/formsnavigationbar" THEN
'Die Navigationsleiste sollte nicht verborgen werden, falls sie eingeblendet wurde.
ELSE
oLayoutMng.hideElement(aElemente(i).ResourceURL)
END IF
NEXT
End Sub
rem ######################################################################
Sub Symbolleisten_Einblenden
DIM oFrame AS OBJECT
DIM oLayoutMng AS OBJECT
DIM aElemente()
oFrame = StarDesktop.getCurrentFrame()
oLayoutMng = oFrame.LayoutManager
oLayoutMng = oFrame.LayoutManager
aElemente = oLayoutMng.getElements()
FOR i = LBound(aElemente) TO UBound(aElemente)
oLayoutMng.showElement(aElemente(i).ResourceURL)
' eventuell fehlende wichtige Elemente:
' "private:resource/toolbar/standardbar"
' "private:resource/statusbar/statusbar"
NEXT
End Sub
rem ######################################################################
Sub FokusSetzen
oDoc = ThisComponent
oDocView = oDoc.getCurrentController()
oForm = oDoc.drawpage.forms(0) ' forms(0) = MainForm (Hauptformular) im Formular-Navigator
oFeld = oForm.getByName("txtAnrede") ' Feldname im Formular-Navigator
oDocView.getControl(oFeld).setFocus()
End Sub
rem ######################################################################
' Formularänderungen speichern, aktuellen Datensatz speichern, Formular und Datenbank schließen
Sub DB_schliessen
Dim Document as Object
Dim Dispatcher as Object
Dim oDoc as Object
Dim oForm as Object
' Frage für MsgBox
Frage = "Möchten Sie die Datenbank wirklich schließen "+chr(13)+_
"und alle Eingaben speichern? "
' falls auf Nein geklickt, Sub verlassen
If MsgBox ( Frage,36) = 7 Then
Exit Sub
End If
' Zugriff auf Dokument
Document = ThisComponent.CurrentController.Frame
Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' Änderungen im Formular speichern, nicht im ungespeicherten Datensatz
Dispatcher.executeDispatch(Document, ".uno:Save", "", 0, Array())
' Zugriff auf das Formular und speichern des aktuellen Datensatzes
oForm = ThisComponent.DrawPage.Forms.getByName("MainForm") ' geht auch: Forms(0)
If oForm.IsNew then oForm.InsertRow Else oForm.UpdateRow
' Formular schließen
ThisComponent.CurrentController.Frame.Close(False)
' Datenbank schließen
oDoc = ThisDatabaseDocument
oDoc.Store()
oDoc.Close(True)
End Sub
rem ######################################################################
Sub BeiOeffnenDB()
' Variable setzen
Dim oController as Object
' Zugriff auf Controller
oController = ThisDatabaseDocument.CurrentController
' falls notwendig Controller verbinden
If not ( oController.isConnected() ) Then oController.connect()
' Formular "Formularname" öffnen. Formularname wie er im Base Hauptfenster steht (also nicht "MainForm")
thiscomponent.Formdocuments.getbyName("Kundenstamm").open
End Sub
rem ######################################################################
Das neue Makro "BeiOeffnenDB" funktioniert bisher einwandfrei. Oder liegt es vielleicht am Zusammenspiel der Makros das Base abschmiert ?
@Robert
Danke, werde ich auch testen.
Heute Abend wird die kleine Datenbank einigen Senioren vorgeführt. Mal sehen was die dazu sagen.
Gruß Gundo
EDIT: Habe es reproduzieren können. Der Crash beim Beenden tritt nur auf wenn ...
Code: Alles auswählen
' Frage für MsgBox
Frage = "Möchten Sie die Datenbank wirklich schließen "+chr(13)+_
"und alle Eingaben speichern? "
' falls auf Nein geklickt, Sub verlassen
If MsgBox ( Frage,36) = 7 Then
Exit Sub
End If
... eingefügt wurde.