Hallo
Ja ich weis ist schon tausend mal gefragt worden, komme aber mit keiner Antwort weiter...
Mein Problem:
Ich habe ein Formular mit dem Namen frmPlan
In diesem wird per VBA ein Klalender erzeugt.
Das Datum steht dann in einem Bezeichnungsfeld "cptItem5" (kein Textfeld)
Jetzt möchte ich aus einer Tabelle (tbl_Kalender) die nicht mit dem Formular (frmPlan) verknüpft ist, einen ZahlenWert holen...
Im Steuerelementinhalt der Bezeichnungsfeld (cptSchi5) steht dieses...
=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]='" & [cptItem5] & "'")
Ergebniss ist "'Fehler"
Wer weiß rat ?
Gruß Gerd
Zitat von: gcniva am Februar 09, 2019, 14:42:57Das Datum steht dann in einem Bezeichnungsfeld "cptItem5" (kein Textfeld)
[...]
Im Steuerelementinhalt der Bezeichnungsfeld (cptSchi5) steht dieses...
=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]='" & [cptItem5] & "'")
Ergebniss ist "'Fehler"
Im Detail ergibt deine Beschreibung keinen Sinn. - Ein Bezeichnungsfeld hat keine Eigenschaft
Steuerelementinhalt! Der Anzeigetext eines Bezeichnungsfeldes wird über die Eigenschaft
Caption (
Beschriftung?) festgelegt. In dieser Eigenschaft sind aber keine Ausdrücke möglich.
Außerdem kann ein Bezeichnungsfeld nicht in einem Ausdruck referenziert werden.
1.) Du
musst cptItem5 zu einem Textfeld machen. Das kannst du ja in seinen Eigenschaften so einstellen, dass es optisch nicht von einem Bezeichnungsfeld zu unterscheiden ist.
2.) Wenn du Datumswerte als Kriteren in SQL-Abfragen einbaust, müssen diese in # eingeschlossen werden und im US- oder ISO-Format sein.
Es sollte in diesem Fall auch funktionieren, wenn du direkt das Steuerlement in dem Kriterium referenzierst. Dann sollte der Jet-Expression-Service selbst mit der übergabe des Datumwertes zurechkommen.
=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]=[cptItem5]")
Hallo,
abgesehen von der Sinnlosigkeit, ein (variables) Datum in einem Bezeichnungsfeld darzustellen, wäre ein solcher Steuerelementinhalt denkbar:
=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]=" & Format([Bezeichnungsfeld1].[Caption];"\#jjjj-mm-tt\#"))
Wobei das Tabellenfeld "Datum" (ungünstiger Name!) den Datentyp Datum/Uhrzeit aufweisen muss.
Hi
Sorry cptSchi5 ist ein Textfeld...
@DF6GL
Danke so geht's...
=DomWert("[C_Schicht]";"tbl_Kalender";"[Datum]=" & Format([Bezeichnungsfeld1].[Caption];"\#jjjj-mm-tt\#"))
Gruß Gerd
Hallo noch mal...
Wegen der Sinnlosigkeit lässt sich doch immer gerne streiten ;)
Wollte das ganze in VBA lösen, doch wie immer geht das nicht so wie ich es will.
Hier mein Code:
Anzeige nix , Fehlermeldung keine...
Private Sub varX_AfterUpdate()
On Error GoTo myError
'Schichten eintragen
varX = DomWert("[C]", "abf_Kalender", "[Datum] =" & Format([cptItem2].[Beschriftung], "\#jjjj-mm-tt\#"))
myError:
Select Case Err.Number
Case 9999
'spezifische Fehler behandeln
Case Else
MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
Resume myExit
End Sub
Gruß Gerd
Hab mal ein Bild angehängt wie das ganze bis jetzt ausschaut...
Hallo,
und, was genau willst Du machen?
Wenn "cptItem2" ein Textfeld-Steuerelement ist, muss "[Beschreibung]" im Ausdruck weggelassen werden.
Welchen Sinn hat die Prozedur?
Sobald nach einem Eintrag in Feld "varX" (was ist das für ein Steuerelement und wo befindet es sich im Bild?) das Feld verlassen oder auch Return gedrückt wird, wird diesem Feld der Wert aus dem Tabellenfeld "C" beim dem Kriterium entspr. Datensatz zugewiesen und der vorherige Eintrag überschrieben.
Irgendwie nicht nachvollziehbar.
Hi Franz
Glaue ich kann das ganze nicht erklären was ich meine.
Deswegen habe ich dir mal das ganze angehängt...
Gruß Gerd
PS. Ich sehe das Bild
Hallo
Kann man den "Ausdruck" dei domWert aus einen Textfeld im Formular ziehen?
DomWert( Ausdruck; Domäne ; [Kriterien] )
=DomWert("[Schi]";"abf_Kalender";"[Datum]=" & Format([cptItem2].[Beschriftung];"\#jjjj-mm-tt\#"))
Gruß Gerd
Hallo,
vielleicht meinst Du dies:
=DomWert(" & [Schi] & ";"abf_Kalender";"[Datum]=" & Format([cptItem2].[Beschriftung];"\#jjjj-mm-tt\#"))
Hallo Franz
Vielleicht...
Geht aber nicht kommt #Fehler
Gruß
Noch mal...
=Wenn([Schi]="A";DomWert("[A]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));Wenn([Schi]="B";DomWert("[B]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));Wenn([Schi]="C";DomWert("[C]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));Wenn([Schi]="D";DomWert("[D]";"abf_Kalender";"[Datum]=" & Format([cptItem1].[Beschriftung];"\#jjjj-mm-tt\#"));"X"))))
So gehts...
ZitatSo gehts...
...aber nicht gut und nachhaltig.
Solche Wenn-Dann-Orgien kann man sich regelmäßig ersparen, wenn man auf geeignete Tabellen und Tabellenverknüpfungen zurückgreift. Dann lassen sich zusätzlich auch problemlos Erweiterungen vornehmen, bspw. wenn die Abfrage nicht nur aus A-D gerichtet ist sondern auf K oder Z zu erweitern wäre.
Hi Eberhart
Geb dir recht das wird natürlich schwer..
Wollte das ganze mal als VBA machen aber dann kommt der Fehler 428
Sub schiFill()
'Trägt die Schichten ein
On Error GoTo myError
If Schi = "A" Then
Me!cptSchi3 = DLookup("[A]", "abf_Kalender", "[Datum]=" & Format([cptItem3].[Beschriftung], "\#jjjj-mm-tt\#"))
End If
myExit:
Exit Sub
myError:
Select Case Err.Number
Case 9999
'spezifische Fehler behandeln
Case Else
MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
Resume myExit
End Select
End Sub
Gruß Gerd
Ich weiß nicht, ob es die Ursache für den konkrete Fehler ist, aber VBA kommt mit dem Format jjjj-mm-tt nicht zurecht. Verwende das englische Format yyyy-mm-dd stattdessen.
Hi PhilS
Ne kommt der gleiche fehler
Gruß Gerd
Hallo,
die Syntax muss so lauteten:
.
.
Me!cptSchi3 = DLookup("A", "abf_Kalender", "[Datum]=" & Format(Me![cptItem3].[Caption], "\#yyyy-mm-dd\#"))
.
.
(Das Textfeld "cptSchi3" wird mit dem Wert aus Feld "A" der Abfrage "abf_Kalender" gefüllt, der in demjenigen Datensatz steht, bei dem das Datum dem "Wert" aus der Beschriftung des Bezeichnungsfelds "cptItem3" entspricht.)
Zitat von: gcniva am Februar 15, 2019, 16:42:20Ne kommt der gleiche fehler
Du hast aber schon den Ausdruck aus der
Steuerelementinhalt-Eigenschaft entfernt, oder? - Ansonsten ist das Feld an den Ausdruck gebunden und schreibgeschützt.
Hi Franz
Ja das klappt super..
Steuerelementinhalt-Eigenschaft wurde zuvor gelöscht.
Doch leider kann ich es nicht benutzen, denn wenn ich den Kalender einen Monat weiter klicke, bleibt der wert drin stehen. und holt sich nicht den neuen..
Gruß
Hallo,
ja, und warum sollte das passieren?
Wenn Du weiter klickst, dann muss der neue Wert (müssen die neuen Werte) halt erneut zugewiesen werden, am besten bei dem Ereignis, das den neuen Monat anzeigen soll.
Hi Franz
Sorry mein fehler, klar muss natürlich in auch in AfterUpdate() rein 8)
Aber schon das nächste problem...
hier erst mal was ich gemacht habe.
Sub schiFill()
Dim i As Long, lngColor As Long, lngLeft As Long, lngWidth As Long
'Trägt die Schichten ein beim öffnen
On Error GoTo myError
If Schi = "A" Then
For i = 1 To 31
Me("cptSchi" & i) = DLookup("A", "abf_Kalender", "Datum =" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
Next i
End If
If Schi = "B" Then
For i = 1 To 31
Me("cptSchi" & i) = DLookup("B", "abf_Kalender", "[Datum]=" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
Next i
End If
If Schi = "C" Then
For i = 1 To 31
Me("cptSchi" & i) = DLookup("C", "abf_Kalender", "[Datum]=" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
Next i
End If
If Schi = "D" Then
For i = 1 To 31
Me("cptSchi" & i) = DLookup("D", "abf_Kalender", "[Datum]=" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
Next i
End If
myExit:
Exit Sub
myError:
Select Case Err.Number
Case 9999
'spezifische Fehler behandeln
Case Else
MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
Resume myExit
End Select
End Sub
Das geht auch , nur kommt die Meldung "Fehlender Oparator [Datum]="
Schreibt aber trotzdem die Schichten rein
Gruß Gerd
Hallo,
mal abgesehen davon, ob das alles konzeptionell so optimal ist, könnte der Code so gekürzt werden, wobei unklar ist, was "Schi" denn ist. Falls es sich hierbei um ein Steuerelement handelt, dann etwa so:
Sub schiFill()
Dim i As Long, strSchi as String
'Trägt die Schichten ein beim öffnen
On Error GoTo myError
strSchi = Me!Schi
For i = 1 To 31
Me("cptSchi" & i) = DLookup("[" & strSchi & "], "abf_Kalender", "[Datum] =" & Format(Me("cptItem" & i).[Caption], "\#yyyy-mm-dd\#"))
Next i
End If
myExit:
Exit Sub
myError:
Select Case Err.Number
Case 9999
'spezifische Fehler behandeln
Case Else
MsgBox "Ausnahme Nr. " & Err.Number & ". " & Err.Description
Resume myExit
End Select
End Sub
Der Fehler könnte daher rühren, dass in einem Bezeichnungsfeld kein gültig (geschriebenes) Datum drinsteht.
btw: der Name "Datum" ist ein "gefährliches" (reserviertes) Wort, weil es für die Date()-Funktion steht und mitunter Probleme aufwirft. Deshalb diesen Namen unbedingt in Eckklammern setzen.
Hi
Ne geht auch nicht...
Glaube aber den Fehler gefunden zu haben,
Wenn sich der Kalender aufbaut blendet er die Tage die nicht zu dem Monat gehören aus.
Soll heißen hat der Monat nur 28 Tage bekomme ich auch nur 28 Tage angezeigt.
Der VBA Code will aber 31 Tage füllen :-\
Gruß Gerd
ZitatFor i = 1 To 31
Setze statt 31 den Tag des monatsletzten Datums ein.