Discussion:
Fehler beim Kompilieren - Objekt erforderlich
(zu alt für eine Antwort)
Rüdiger Gram
2009-02-07 12:35:36 UTC
Permalink
Hallo Ng,


Dim Ufrm As String

Set Ufrm = Forms!Allgemein!UFoGesprPartn.Form
Set Ufrm = "Allgemein.[UFoGesprPartn vorne].Form"
MsgBox Ufrm

Beide Set-Anweisungen bringen die Fehlermeldung "Fehler beim Kompilieren -
Objekt erforderlich.
Was fehlt Access denn da?

Gruß

Rüdiger Gram
Stefan Hoffmann
2009-02-07 12:48:49 UTC
Permalink
hallo Rüdiger,
Post by Rüdiger Gram
Beide Set-Anweisungen bringen die Fehlermeldung "Fehler beim Kompilieren -
Objekt erforderlich.
Was fehlt Access denn da?
Set benötigst du nur für Objektvariablen. String ist kein Objekt, also

Dim Ufrm As String

Ufrm = "Allgemein.[UFoGesprPartn vorne].Form"
MsgBox Ufrm

oder

Dim Ufrm As Access.form

Set Ufrm = Forms!Allgemein!UFoGesprPartn.Form
MsgBox Ufrm.Name



mfG
--> stefan <--
--
Access-FAQ http://www.donkarl.com/
KnowHow.mdb http://www.freeaccess.de
Newbie-Info http://www.doerbandt.de/Access/Newbie.htm
Rüdiger Gram
2009-02-07 14:09:30 UTC
Permalink
Post by Stefan Hoffmann
Set benötigst du nur für Objektvariablen. String ist kein Objekt, also
Dim Ufrm As String
Ufrm = "Allgemein.[UFoGesprPartn vorne].Form"
MsgBox Ufrm
oder
Dim Ufrm As Access.form
Set Ufrm = Forms!Allgemein!UFoGesprPartn.Form
MsgBox Ufrm.Name
Vielen Dank an Stefan und Dietmar.

Beides funktioniert, aber leider ist immer noch der Wurm drin:

Dim Ufrm As Access.Form

Set Ufrm = Forms!Allgemein![UFoGesprPartn vorne].Form
MsgBox Ufrm.Name

If Len(Forms!Allgemein![UFoGesprPartn vorne].Form![Abteilung]) < 1 Then
Ufrm!Abteilung = "Test"

Diese letzte Anweisung wird nicht ausgeführt - vermutlich ist die Syntax
nicht in Ordnung.
Es kommt allerdings auch keine Fehlermeldung.

Wer weiß Rat?

Gruß - Rüdiger
Sascha Trowitzsch
2009-02-07 14:23:07 UTC
Permalink
Hi Rüdiger,
Post by Rüdiger Gram
Post by Stefan Hoffmann
Set benötigst du nur für Objektvariablen. String ist kein Objekt, also
Dim Ufrm As String
Ufrm = "Allgemein.[UFoGesprPartn vorne].Form"
MsgBox Ufrm
oder
Dim Ufrm As Access.form
Set Ufrm = Forms!Allgemein!UFoGesprPartn.Form
MsgBox Ufrm.Name
Vielen Dank an Stefan und Dietmar.
Dim Ufrm As Access.Form
Set Ufrm = Forms!Allgemein![UFoGesprPartn vorne].Form
MsgBox Ufrm.Name
If Len(Forms!Allgemein![UFoGesprPartn vorne].Form![Abteilung]) < 1 Then
Ufrm!Abteilung = "Test"
Diese letzte Anweisung wird nicht ausgeführt - vermutlich ist die Syntax nicht
in Ordnung.
Es kommt allerdings auch keine Fehlermeldung.
Wahrscheinlich kommt als Len() 4 raus?
Was der Funktion Len() übergeben wird, ist wahrscheinlich das
Steuerelementobjekt selbst, nicht dessen Inhalt.
Besser wäre:
Forms!Allgemein![UFoGesprPartn vorne]![Abteilung].Value

Ciao, Sascha
Rüdiger Gram
2009-02-07 15:55:59 UTC
Permalink
Post by Sascha Trowitzsch
Wahrscheinlich kommt als Len() 4 raus?
Was der Funktion Len() übergeben wird, ist wahrscheinlich das
Steuerelementobjekt selbst, nicht dessen Inhalt.
durchaus denkbar
Post by Sascha Trowitzsch
Forms!Allgemein![UFoGesprPartn vorne]![Abteilung].Value
Jawohl!!! Das war die richtige Lösung. Funktioniert auch mit dieser
Gestaltung:

If IsNull(Ufrm!Abteilung) = True Then Ufrm!Abteilung = "Test"

Besten Dank für die Hilfe (seit 2 Tagen doktere ich schon an dieser Sache
herum)

Gruß

Rüdiger
Sascha Trowitzsch
2009-02-07 18:07:52 UTC
Permalink
Hi Rüdiger,
Post by Rüdiger Gram
Post by Sascha Trowitzsch
Wahrscheinlich kommt als Len() 4 raus?
Was der Funktion Len() übergeben wird, ist wahrscheinlich das
Steuerelementobjekt selbst, nicht dessen Inhalt.
durchaus denkbar
Post by Sascha Trowitzsch
Forms!Allgemein![UFoGesprPartn vorne]![Abteilung].Value
Jawohl!!! Das war die richtige Lösung. Funktioniert auch mit dieser
If IsNull(Ufrm!Abteilung) = True Then Ufrm!Abteilung = "Test"
Trotzdem:
Wenn ich einfach den Wert eines Steuerelements in eine Variable einlesen will,
dann verlasse ich ich mich auf die Default-Eigenschaft des Objekts (Value).
Sobald ich den Wert aber an eine Funktion übergebe, dann setze ich inzwischen
immer explizit .Value hintendran - ist nur eine Sache der Gewohnheit, die die
Bugsuche vereinfacht.
Ähnlicher Fall:
Recordset!FieldXY <> Recordset!FieldXY.Value
Ist besonders bei ACE (A2007) sinnvoll, weil dort ein Field2.Value selbst wieder
ein Objekt (Recordset) sein kann.

Ciao, Sascha
Stefan Hoffmann
2009-02-07 18:33:28 UTC
Permalink
hallo Sascha,
Post by Sascha Trowitzsch
Sobald ich den Wert aber an eine Funktion übergebe, dann setze ich inzwischen
immer explizit .Value hintendran - ist nur eine Sache der Gewohnheit, die die
Bugsuche vereinfacht.
Nieder mit den Standardeigenschaften .)

Ich mag sie überhaupt nicht... ich wünschte es gäbe ein Option
DefaultProperty Off.


mfG
--> stefan <--
Peter Doering
2009-02-08 03:03:40 UTC
Permalink
Hallo Stefan,
Post by Stefan Hoffmann
Post by Sascha Trowitzsch
Sobald ich den Wert aber an eine Funktion übergebe, dann setze ich inzwischen
immer explizit .Value hintendran - ist nur eine Sache der Gewohnheit, die die
Bugsuche vereinfacht.
Nieder mit den Standardeigenschaften .)
Ich mag sie überhaupt nicht... ich wünschte es gäbe ein Option
DefaultProperty Off.
Wie sieht's mit Call vor Prozedurnamen aus? Wie mit Let for
Variablenzuweisungen? ;-)

Gruss - Peter (der auch immer .Value ausschreibt ;-)
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
NEK1 Zusatztermin wg. hoher Nachfrage:
Sa/So 21./22.3.2009 http://www.donkarl.com/NEK
Stefan Hoffmann
2009-02-08 15:34:04 UTC
Permalink
hallo Peter,
Post by Peter Doering
Post by Stefan Hoffmann
Ich mag sie überhaupt nicht... ich wünschte es gäbe ein Option
DefaultProperty Off.
Wie sieht's mit Call vor Prozedurnamen aus?
Autsch, erwischt.

Da halte ich es ähnlich gemischt wie Sascha. Call benutze ich zum Aufruf
von Ereignisprozeduren (Call Form_Current), ansonsten verziechte ich
darauf...


mfG
--> stefan <--

Dietmar Thesing
2009-02-07 13:00:26 UTC
Permalink
Hallo Rüdiger,

"Rüdiger Gram" schrieb
Post by Rüdiger Gram
Hallo Ng,
Dim Ufrm As String
Set Ufrm = Forms!Allgemein!UFoGesprPartn.Form
Set Ufrm = "Allgemein.[UFoGesprPartn vorne].Form"
Ergänzend zu Stefans Antwort -
Unterformular-Steuerelement-Name und Herkunftsobjekt solltest Du
unterscheiden. Dann tut Access das auch. Also wenn das UFo im
Datenbankfenster "UfoGesprPartn" heißt, den Steuerelement-Namen z.B.
ctrUfoGesprPartn umbenennen.

HTH
Dietmar
Loading...