Seite 1 von 1

Formularnamen in Makro verwenden

Verfasst: Mi 30. Jul 2014, 21:45
von althoffc
Hallo,

ich möchte per Makro Formulare öffnen bzw. wechseln. Das habe ich mit Hilfe verschiedener Forenbeiträge hinbekommen und es funktioniert so weit sehr gut.

Ich verwende die "Zusatzinformationen" (Tag) der Schaltfläche, um dort den Namen des zu öffnenden Formulars zu hinterlegen.
Mit der getByName()-Methode wird dann das entsprechende Formular geöffnet.

Es wird hier der Formularname verwendet, der in der Base-Anwendung für den Enduser unter "Formulare" sichtbar ist.
Wenn nun ein Enduser ein Formular umbenennt, funktionieren die Makros zum wechseln der Formulare nicht mehr.
Kann man nicht auf einen "internen" Namen der Formulare zurückgreifen, welcher zum Beispiel in den Eigenschaften eines Formulars (beim Bearbeiten) zu finden ist?
Dort wird ein Name nicht so schnell von Endusern geändert und die Makros laufen dadurch stabiler.

Gruß
Carsten

Re: Formularnamen in Makro verwenden

Verfasst: Fr 1. Aug 2014, 22:22
von F3K Total
Hi,
althoffc hat geschrieben:Kann man nicht auf einen "internen" Namen der Formulare zurückgreifen, welcher zum Beispiel in den Eigenschaften eines Formulars (beim Bearbeiten) zu finden ist?
Nein, denn die Eigenschaften sind erst dann lesbar, wenn das Formular geöffnet (geladen) wurde.
Aber hier eine erste Alternative:
Wenn du in die Zusatzinformation (Tag) eine fortlaufende Nummer, beginnend bei 0, schreibst, werden die Formulare in der Reihenfolge, in der sie erstellt wurden, geöffnet:

Code: Alles auswählen

Sub S_open_Form(event)
    dim i as integer
    i = event.source.model.tag
    oformdocuments = Thisdatabasedocument.formdocuments
    oformdocuments.getByIndex(i).open
end sub
Hier eine Lösung , die den internen Namen der Formulare verwendet, z.B. Obj12, Obj21 ... usw.:
Mit diesem Makro ermittelst du die persistenten Namen deiner Formulare, die du dann als Zusatzinformation in die jeweilige Schaltfläche legst:

Code: Alles auswählen

Sub S_analyse_persistant_Form_Name
    oformdocuments = Thisdatabasedocument.formdocuments
    oformdocumentsenumeration = oformdocuments.createEnumeration
    while oformdocumentsenumeration.hasmoreelements
         oformdocument = oformdocumentsenumeration.nextelement
         inputbox ("Formularname: " & oformdocument.Name & chr(10) & chr(10)&  "persistenter Name:","persistenten Formularnamen ermitteln",oformdocument.PersistentName)
    wend
end sub
Dann kannst du die Formulare, auch nach dem Umbenennen mit diesem Makro öffen:

Code: Alles auswählen

Sub S_open_Form(event)
    dim sNamePersistant as string
    sNamePersistant = event.source.model.tag
    oformdocuments = Thisdatabasedocument.formdocuments
    oformdocumentsenumeration = oformdocuments.createEnumeration
    while oformdocumentsenumeration.hasmoreelements
         oformdocument = oformdocumentsenumeration.nextelement
         if oformdocument.PersistentName = sNamePersistant then  oformdocument.open
    wend
end sub
HTH R