DPunch hat geschrieben:Aloha
chrdz hat geschrieben:Wird jetzt klar, wann das Problem auftritt?
Es hört sich zwar danach an, als würde das Makro beim OnLoad-Event aufgerufen, aber klar ist das immer noch nicht

Jedenfalls liess sich der Fehler beim OnLoad-Event nicht reproduzieren, schon gar nicht in der bemängelten Codezeile, eine Ferndiagnose ist (zumindest mir) daher mit den momentanen Infos unmöglich.
danke erst mal für das bisherige Interesse.
Eigentlich ist der Titel meines Posts nicht ganz richtig. Er sollte heißen, Makro funktioniert nicht, wenn Formular fremdgestartet. Das fällt mir jetzt endlich auf. Auch auf die Gefahr hin, dass ich mich wiederhole:
In meinem Base-Container "GCS-Tool-Management.odb" habe derzeit ich folgende Formulare:
000_Control_Center
701_Sites
702_Supervisors
801_Tool_Names
802_Tool_Details
etc.
Das ganze ist an eine MySQL Datenbank angebunden.
Der Plan ist, dass nur das Formular 000_Control_Center gestartet wird und die anderen Formulare hieraus gestartet werden. Dies soll über den gleichnamigen Button und Formularnamen realisiert werden. Folgende Makros werden zum Öffnen der Formulare (aus dem Control-Center) benutzt:
Code: Alles auswählen
Sub nameButton( oEvent )
Dim oButtonName as String
oButtonName = oEvent.Source.Model.Name
FormSitesButton ( oButtonName )
End Sub
Sub FormSitesButton(oButtonName)
REM Globalscope.BasicLibraries.LoadLibrary( "MRILib" )
Dim oDataBaseContext as Object
Dim oMyForm as Object
Dim oMyActiveButton as Object
Dim oPB as Object
Dim oMRI as object
Dim Context AS Object
Dim Conn As Object
Dim DB As Object
Dim FormDoc As Object
Dim Args(1) As New com.sun.star.beans.PropertyValue
Dim FormName As String
Registrieren
FormName = oButtonName
Context=CreateUnoService("com.sun.star.sdb.DatabaseContext")
DB=Context.getByName("GCS-tool-management")
Conn=DB.getconnection("GCS","Shanghai")
Args(0).Name="ActiveConnection" : Args(0).Value=Conn
Args(1).Name="OpenMode" : Args(1).Value="open"
FormDoc=DB.DatabaseDocument.FormDocuments.loadComponentFromURL(FormName,"_self",2,Args) REM << BASIC-Laufzeitfehler.
FormDoc.CurrentController.Frame.ContainerWindow.setFocus()
End Sub
die Sub "Registrieren" überprüft, bzw. registriert die geöffnete "Datenbank" (.odb) in OpenOffice.
Die Formulare werden ohne Problem geöffnet.
Mit dem Makro
Code: Alles auswählen
Sub Rack_Display
Dim oMyForm as object
Dim oControl as Object
Dim Filter as String
Dim oPB as Object
Dim oMRI as object
Dim i as Integer
Dim oName as String
oMyForm = StarDesktop.CurrentComponent.Drawpage.Forms.getbyName("Tools").getbyname("Tool_details")
oControl = oMyForm.getColumns.getbyname("location_id")
Filter = oControl.Value
oMyForm = StarDesktop.CurrentComponent.Drawpage.Forms.getbyName("Tools").getbyname("Tool_details").getbyname("Storage")
oControl = oMyForm.getbyname("Location")
if Filter = "2" then
for i = 1 to 4
oName = "Location"+Str(i)
oControl = oMyForm.getbyname(oName)
'oMRI = CreateUnoService( "mytools.Mri" )
'oMRI.inspect( oControl )
oControl.EnableVisible = True
next i
else
for i = 1 to 4
oName = "Location"+Str(i)
oControl = oMyForm.getbyname(oName)
oControl.EnableVisible = False
next i
endif
End Sub
soll, im Fall dass sich das Werkzeug im Haus (site-id 2) befindet, der Lagerort angezeigt werden. Ausgelöst einmal bei "loadComponent" oder aber bei Maustaste losgelassen bei einer Neuauswahl in einer Tabelle innerhalb des Formulars.
Lade ich das Formular über das Control-Center, bekomme ich die Fehlermeldung "Basic Laufzeitfehler...". Lade ich das Formular über einen Doppelklick in der Formularseite des odb-Containers funktioniert alles.
Grüße aus Shanghai
Christian