PDA

Vollständige Version anzeigen : Funktion in Form nur ausführen, sofern Form UFo ist


flew
14.10.2011, 10:38
Hallo zusammen,

ich habe ein Kalender-Formular, welches ich mal als eigenes Formular bspw. Popup anzeigen lassen möchte jedoch auch als Unterformular. Dann wähle ich eine Monats-Jahr-Kombination aus und lasse mir den Monat anzeigen mit Wochenenden, Feiertagen etc.

Wenn ich den Kalender als Ufo einsetze, dann soll nach Aktualisierung der Monats-Jahr-Kombination an das Hauptformular der neue Wert gegeben werden. Gelöst habe ich das mittels einer Public Sub MonthYear im HF und einer Anweisung Me.Parent.MonthYear im UF.
Klappt, das HF erhält die neue Monats-Jahr-Kombination und ich kann im HF entsprechend dieser nun Rechnungen o.ä. anzeigen lassen.

Wenn ich das Formular jetzt allerdings als eigenständiges Formular verwende, erhalte ich natürlich den Fehler, dass ja kein Parent-Formular existiert.

Wie würdet ihr das lösen, der Kalender soll nicht nur in diesem einen HF als Kalender eingesetzt werden, sondern in mehreren, und jedes HF kann natürlich eine andere Public Sub haben?

Grüße

Atrus2711
14.10.2011, 10:43
Hi,

ich würde dem Ufo die anzuzeigenden Werte, wenn vorhanden, über Eigenschaften übergeben. Wenn es keine Eigenschaften übergeben erhält, dann ist es autonom und macht seinen eigenen Kram :)

maikek
14.10.2011, 10:45
Moin,
wieso eine andere Public Sub? Wozu ist die denn dann public?
Ob ein Parent da ist, kannst du ja vorher prüfen:
If len("" & Me.Parent.Name) > 0 then ...
maike

flew
14.10.2011, 10:48
@Atrus
Heißt, dass ich den Kalender-Wert aus dem HF heraus ändere, dem UF über Public Properties den geänderten Werte übergebe und die Möglichkeit im Kalender-UF dort auch eine Wertveränderung vorzunehmen bspw. durch Ausblenden der (Monats, Jahr)-Kombinationsfelder verhindere ?

@Maike
Muss so eine Sub nicht public sein, wenn ich sie aus dem UF heraus ansprechen möchte ?
Mit einer anderen Public Sub meine ich bspw. das Rechnungsformular benötigt die Angaben des Monats und des Jahres, bspw. aber ein Jahresumsatz-Formular benötigt ja nur das Jahr, sodass die Public Sub im Jahresumsatz-Formular ja bspw. nur die Public Sub YYear wäre

flew
14.10.2011, 10:57
@Maike

Eine Prüfung auf ein existierendes HF mittels If Len("" & Nz(Me.Parent.Name, "")) > 0 Then ... oder If Len("" & Me.Parent.Name) > 0 Then ... klappt nicht sofern der Kalender kein UF ist, Laufzeitfehler 2452, ungültiger Verweis auf HF-Eigenschaft

Atrus2711
14.10.2011, 11:00
Ansatz dazu könnte sein: If Me.Parent is Nothing Then...

Atrus2711
14.10.2011, 11:03
@flew:
Heißt, dass ich den Kalender-Wert aus dem HF heraus ändere, dem UF über Public Properties den geänderten Werte übergebe und die Möglichkeit im Kalender-UF dort auch eine Wertveränderung vorzunehmen bspw. durch Ausblenden der (Monats, Jahr)-Kombinationsfelder verhindere ?
Das HF könnte das Ufo/Popup aufrufen und ihm den bisherigen Wert (wenn vorhanden) des HF-Datums über Eigenschaften übergeben. Das Ufo/Popup stellt diesen Wert dar und erlaubt Änderungen. Bei Klick auf Ufo-OK wird das neue Datum z.B. über ein Event an das HF zurückgeschossen; das HF reagiert auf das Event. Bei Ufo-Abbruch wird das Ufo nur geschlossen und im HF passiert nix.

Die Datumseingabe im HF kann beibehalten werden, das KalenderUfo ist ja nur eine Eingabehilfe.

Maxel
14.10.2011, 11:07
Hallo,

bei der Prüfung auf Ufo könnte man auch einen Fehler provozieren:
Public Function IsSubform(F As Form) As Boolean
Dim X$ As String

On Error Resume Next
X$ = F.Parent.Name
IsSubform = (Err = 0)

End Function
Aufruf:
If IsSubform(Me) Then 'Unterformular
.....
Else 'Hauptformular
.....
End If

maikek
14.10.2011, 11:17
Hmm, ich dachte, ich hätte das mal so in der Art verwendet mit der Prüfung auf len ... aber die Fehlermeldung ist natürlich logisch.
maike

flew
14.10.2011, 11:31
Ok ich habe es nun so:

in einem Modul
Public Function IsSubform(F As Form) As Boolean

Dim X As String

On Error Resume Next
X = F.Parent.Name
IsSubform = (Err = 0)

End Function

Im Kalenderformular
Option Compare Database
Option Explicit

Dim HF As Object

Private Sub Form_Open(Cancel As Integer)

If IsSubform(Me) Then 'Unterformular
Set HF = Nz(Me.Parent, Nothing)
Else 'Hauptformular

End If

End Sub

Private Sub SetUpCalendar()

'wird aufgerufen, wenn ich das Monats-Jahr-Kombifeld ändere

If HF Is Nothing Then
Else
Me.Parent.MonthYear (Me!cboMonthsYears.Column(1) & ";" & Me!cboMonthsYears.Column(2))
End If

End Sub

Im Hauptformular (bsp. Rechnungsformular)
Public Sub MonthYear(strMonthYear As String)

If InStr(strMonthYear, ";") > 0 Then

MsgBox "Monat: " & Left(strMonthYear, InStr(strMonthYear, ";") - 1) & _
vbCrLf & vbCrLf & "Jahr: " & Mid(strMonthYear, InStr(strMonthYear, ";") + 1)

End If

End Sub

So klappt es, dankeschön an euch !

@Atrus, ich habe ja momentan in dem HF keine Option zur Änderung der Monats-Jahr-Kombi, das möchte ich ja alleine aus dem UF heraus durch ein Kombifeld erledigen