PDA

Vollständige Version anzeigen : nur anzeigen, wenn


tg0042
22.03.2006, 16:09
habe ein form, in dem 3 buttons sind.

diese würde ich gerne nur dann anzeigen, wenn in einem textfeld ein bestimmter wert eingegeben wird.

dieser wert kann varieren, er muss aber in einer tabelle zwingen vorkommen. es handelt sich hierbei um 2 bis 4stellige zahlen

ist sowas möglich?

wie müsste so eine bedingung aussehen ?

gruß, tobi

Großer Meister
22.03.2006, 16:29
im ereignis 'nach aktualisierung' der Textfelder gibst du die Bedingung ein, und je nachdem was für eine zahl eingegeben wird, kommt dann DeinTextfeld.visible=true oder DeinTextfeld.visible=false

tg0042
23.03.2006, 07:31
wie müsste so eine bedingung aussehen ?
sollte sich ja nach möglichkeit auf die werte der tabelle beziehen

kann mir niemand helfen :(






EDIT: Rechtschreibfehler...

Frechdax
23.03.2006, 08:15
Hi,

If (Me!DeinTextfeld = DeineEingabeWoDieButtonsAuftauschenSollen) Then deinButton.visible = False

Hat bei mir gerade wunderbar funktioniert.

Lg Mareike

tg0042
23.03.2006, 10:00
kannst du das präzesieren, komme irgendwie nicht weiter...


das textfeld heißt "Text5"

die buttons
befehl7
befehl8
befehl9

die tabelle, in der die werte stehen
Mitarbeiter

Frechdax
23.03.2006, 10:09
Hi,

ich versuchs.

If (Me!Text5 = 3) Then befehl7.visible = False else befehl7.visible = True
If (Me!Text5 = 3) Then befehl8.visible = False else befehl8.visible = True
If (Me!Text5 = 3) Then befehl9.visible = False else befehl9.visible = True

So würde ich es machen. Die else Bedingung war bei mir notwendig. Musst du mal sehen, ob du die brauchst.

Den Code trägst du beim Ereignis nach Aktualisierung von Text5 ein.

Da wo ich eine 3 hingeschrieben habe, muss das rein was dein Benutzer eingibt und die Buttons sehen darf. zB. Wenn in Text5 die 3 eingegeben wird erscheinen die Buttons. Wenn etwas anderes eingegeben wird, bleiben die Buttons verborgen. Wenn bei dir ein Text eingegeben wird zb. Hallo, musst du den wahrscheinlich in " " setzen.

Lg Mareike

tg0042
23.03.2006, 10:26
hmmm, das problem ist nur, dass es sich hier um verschiedene werte handeln kann, nicht nur um z.B. die 3.
es sollen alle werte genommen werden, die aus der tabelle Mitarbeiter und dort im feld PN stehen

Arne Dieckmann
23.03.2006, 10:42
Dann probiere es so:

Dim vorhanden as Long

vorhanden=Nz(DCount("*","Mitarbeiter","PN=" & Me!Text5),0)

Me!befehl7.Visible=vorhanden>0
Me!befehl8.Visible=vorhanden>0
Me!befehl9.Visible=vorhanden>0

tg0042
23.03.2006, 12:33
in was für ein erreignis muss ich das reinschreiben im form ?

Arne Dieckmann
23.03.2006, 12:36
Ein Ereignis wurde schon mehrfach vorgeschlagen, zusätzlich empfehle ich das Formular-Ereignis "Beim Anzeigen" - dann klappt das Ausblenden auch beim Datensatzwechsel und Öffnen des Formulares.

tg0042
23.03.2006, 12:45
Bekomme eine Fehlermeldung:
laufzeitfehler 3075
Sytaxfehler (fehlender Operator) im abfrageausdruck PIN=
Private Sub Form_Current()
Dim vorhanden As Long

vorhanden = Nz(DCount("*", "Mitarbeiter", "PIN=" & Me!Text5), 0)

Me!Befehl7.Visible = vorhanden > 0
Me!Befehl8.Visible = vorhanden > 0
Me!Befehl9.Visible = vorhanden > 0
End Sub

und
Private Sub Form_AfterUpdate()
Dim vorhanden As Long

vorhanden = Nz(DCount("*", "Mitarbeiter", "PIN=" & Me!Text5), 0)

Me!Befehl7.Visible = vorhanden > 0
Me!Befehl8.Visible = vorhanden > 0
Me!Befehl9.Visible = vorhanden > 0
End Sub

Arne Dieckmann
23.03.2006, 12:47
Ist PIN ein Zahlenfeld?

Evtl. muss man das Kriterium ändern:
vorhanden = DCount("*", "Mitarbeiter", "PIN=" & Nz(Me!Text5,0))

Falls PIN ein Textfeld ist:
vorhanden = DCount("*", "Mitarbeiter", "PIN='" & Nz(Me!Text5,"") & "'")


Übrigens wurde dir das Ereignis "Nach Aktualisierung" des Textfeldes empfohlen.

tg0042
23.03.2006, 13:06
ist ein textfeld

mit folgendem code, werden die buttons versetck, kommen aber auch bei richtiger zahleneingabe nicht zum vorschein ?
Private Sub Form_Current()
Dim vorhanden As Long

vorhanden = DCount("*", "Mitarbeiter", "PIN='" & Nz(Me!Text5, "") & "'")

Me!Befehl7.Visible = vorhanden > 0
Me!Befehl8.Visible = vorhanden > 0
Me!Befehl9.Visible = vorhanden > 0
End Sub

das gleich auch noch bei
Private Sub Form_AfterUpdate()


??

Großer Meister
23.03.2006, 13:27
Form_Current ist das Ereignis "Beim Anzeigen". Jetzt noch das ganze in das Ereignis "Nach Aktualisierung" vom Textfeld Text5 verschieben.

tg0042
23.03.2006, 14:57
Private Sub Form_Current()
Dim vorhanden As Long
vorhanden = DCount("*", "Mitarbeiter", "PIN='" & Nz(Me!Text5, "") & "'")
Me!Befehl7.Visible = vorhanden > 0
Me!Befehl8.Visible = vorhanden > 0
Me!Befehl9.Visible = vorhanden > 0
End Sub



Private Sub Text5_AfterUpdate()
Dim vorhanden As Long
vorhanden = DCount("*", "Mitarbeiter", "PIN='" & Nz(Me!Text5, "") & "'")
Me!Befehl7.Visible = vorhanden > 0
Me!Befehl8.Visible = vorhanden > 0
Me!Befehl9.Visible = vorhanden > 0
End Sub


buttons sind immer noch nicht da...

Anne Berg
23.03.2006, 15:24
Sollte da evtl. ein Repaint erforderlich sein? :confused:


PS: setze mal einen Breakpoint in die Prozeduren, um zu testen, ob/wann sie aufgerufen werden.

tg0042
23.03.2006, 15:31
Repaint ??
Breakpoint ??

Anne Berg
23.03.2006, 15:46
Ich nehme es zurück: Ein Me.Repaint nach Ändern der Visible-Eigenschaft ist nicht erforderlich.

Ein Breakpoint kann im Klassenmodul per Klick in den linken Randstreifen gesetzt werden (--> roter Punkt, rote Markierung). Dann kann der Code zeilenweise mit F8 durchlaufen werden.

tg0042
25.03.2006, 10:13
komme hier irgendwie nicht weiter...

kann mri jemand auf die sprünge helfen...

die buttons sind anch wie vor unsichtbar und kommen auch bei richtig eingegeben werten (die in der tbl stehen) nicht zum vorschein)

wie müsste denn der code aussehen, wenn die buttons erst dann sichtbar werden, wenn ich einen bestimmten wert eingebe. also nicht alle werte aus einer tabelle sondern einen festen wert. z.b. die nr 42

Arne Dieckmann
25.03.2006, 10:22
Me!Befehl7.Visible = Me!text5="42"

wäre für einen Test geeignet. Wenn das auch nicht geht, läuft da irgendetwas anderes schief.

tg0042
25.03.2006, 10:38
Private Sub Form_Current()
Me!Befehl7.Visible = Me!Text5 = "42"
End Sub

Laufzeitfehler 13
Typen unverträglich...

Hier mal der ganze Code des Forms...
Option Compare Database

Private Sub Befehl4_Click()
On Error GoTo Err_Befehl4_Click
DoCmd.Close
Exit_Befehl4_Click:
Exit Sub

Err_Befehl4_Click:
MsgBox Err.Description
Resume Exit_Befehl4_Click

End Sub
Private Sub Form_Close()
Me!Text5 = Null
End Sub
Private Sub Befehl7_Click()
On Error GoTo Err_Befehl7_Click

Dim stDocName As String

stDocName = "Druck Rechnungs mit Kopie BH"
DoCmd.RunMacro stDocName

Exit_Befehl7_Click:
Exit Sub

Err_Befehl7_Click:
MsgBox Err.Description
Resume Exit_Befehl7_Click

End Sub
Private Sub Befehl8_Click()
On Error GoTo Err_Befehl8_Click

Dim stDocName As String

stDocName = "Druck-Rechnung für Bereitschaft ohne Druck"
DoCmd.RunMacro stDocName

Exit_Befehl8_Click:
Exit Sub

Err_Befehl8_Click:
MsgBox Err.Description
Resume Exit_Befehl8_Click

End Sub
Private Sub Befehl9_Click()
On Error GoTo Err_Befehl9_Click

Dim stDocName As String

stDocName = "Druck Rechnung mit Kopie BH und Lieferschein"
DoCmd.RunMacro stDocName

Exit_Befehl9_Click:
Exit Sub

Err_Befehl9_Click:
MsgBox Err.Description
Resume Exit_Befehl9_Click

End Sub
Private Sub Befehl10_Click()
On Error GoTo Err_Befehl10_Click

If Me!Liste2.ListIndex > -1 Then
Dim stDocName As String

stDocName = "Sammelrechnung fill"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Else
MsgBox "Kein Listeneintrag ausgewählt"
End If

Exit_Befehl10_Click:
Exit Sub

Err_Befehl10_Click:
MsgBox Err.Description
Resume Exit_Befehl10_Click

End Sub

Private Sub Form_Current()
Me!Befehl7.Visible = Me!Text5 = "42"
End Sub

Arne Dieckmann
25.03.2006, 10:41
Ich bin davon ausgegangen, dass du das bei dem Ereignis "Nach Aktualisierung" testen willst.

Beim Formular-Ereignis "Beim Anzeigen" versuch's lieber so:
Private Sub Form_Current()
Me!Befehl7.Visible = Nz(Me!Text5,"") = "42"
End Sub

Die Nz()-Funktion dann lieber auch gleich beim Aktualisierungsereignis des Textfeldes "Text5" einsetzen.

tg0042
25.03.2006, 10:53
Private Sub Form_Current()
Me!Befehl7.Visible = Nz(Me!Text5, "") = "42"
Me!Befehl8.Visible = Nz(Me!Text5, "") = "42"
Me!Befehl9.Visible = Nz(Me!Text5, "") = "42"
End Sub

Private Sub Text5_AfterUpdate()
Me!Befehl7.Visible = Nz(Me!Text5, "") = "42"
Me!Befehl8.Visible = Nz(Me!Text5, "") = "42"
Me!Befehl9.Visible = Nz(Me!Text5, "") = "42"
End Sub

so tuts jetzt

nur ist das problem, dass die felder nicht automatisch nach dem eingeben auftauchen... ich muss irgendwie bestätigen...

gibts da eine elegante lösung ?

Großer Meister
25.03.2006, 11:02
du könntest im On Change - Ereignis des Textfelds bei jeder Tastatureingabe die Bedingung checken und dementsprechend die Buttons ein- oder ausblenden.
Auf deutsch heisst das Ereignis 'Bei Änderung'

tg0042
25.03.2006, 11:12
Private Sub Text5_Change()
Me!Befehl7.Visible = Nz(Me!Text5, "") = "42"
Me!Befehl8.Visible = Nz(Me!Text5, "") = "42"
Me!Befehl9.Visible = Nz(Me!Text5, "") = "42"
End Sub

immer noch gleich...

??

Arne Dieckmann
25.03.2006, 11:21
Im Change-Ereignis steht die Text-Eigenschaft zur Verfügung:
Private Sub Text5_Change()
Me!Befehl7.Visible = Nz(Me!Text5.Text, "") = "42"
Me!Befehl8.Visible = Nz(Me!Text5.Text, "") = "42"
Me!Befehl9.Visible = Nz(Me!Text5.Text, "") = "42"
End Sub

tg0042
25.03.2006, 11:24
jepp, jetzt funktionierts perfekt...

danke !!


wäre es theoretisch auch möglich, das argument 42 um ein weiteres zu erweitern, z.b. 45 ?

oder ist das zuviel des guten ?

Arne Dieckmann
25.03.2006, 11:29
Das ist möglich (mit OR):

Me!Befehl7.Visible = (Nz(Me!Text5.Text, "") = "42" OR Nz(Me!Text5.Text, "") = "45")

Wenn's noch mehr werden, sollte man überlegen, die Einzeiler zu ersetzen:
Private Sub Text5_Change()

Dim blnSichtbar as Boolean

Select Case Nz(Me!Text5,"")
Case "42","45","48"
blnSichtbar=True
Case Else
blnSichtbar=False
End Select

Me!Befehl7.Visible = blnSichtbar
Me!Befehl8.Visible = blnSichtbar
Me!Befehl9.Visible = blnSichtbar

End Sub

tg0042
25.03.2006, 11:33
das tut wunderbar, nur ist jetzt das problem der "bestätigung" wieder da...
Private Sub Form_Current()
Dim blnSichtbar As Boolean

Select Case Nz(Me!Text5, "")
Case "42", "45", "48"
blnSichtbar = True
Case Else
blnSichtbar = False
End Select

Me!Befehl7.Visible = blnSichtbar
Me!Befehl8.Visible = blnSichtbar
Me!Befehl9.Visible = blnSichtbar

End Sub
-------------------------------------------------------------
Private Sub Text5_AfterUpdate()
Dim blnSichtbar As Boolean

Select Case Nz(Me!Text5, "")
Case "42", "45", "48"
blnSichtbar = True
Case Else
blnSichtbar = False
End Select

Me!Befehl7.Visible = blnSichtbar
Me!Befehl8.Visible = blnSichtbar
Me!Befehl9.Visible = blnSichtbar

End Sub
-------------------------------------------------------------
Private Sub Text5_Change()

Dim blnSichtbar As Boolean

Select Case Nz(Me!Text5, "")
Case "42", "45", "48"
blnSichtbar = True
Case Else
blnSichtbar = False
End Select

Me!Befehl7.Visible = blnSichtbar
Me!Befehl8.Visible = blnSichtbar
Me!Befehl9.Visible = blnSichtbar

End Sub

Arne Dieckmann
25.03.2006, 11:38
Sorry, das Ereignis hatte ich richtig gewählt, aber dafür die Text-Eigenschaft vergessen:
Private Sub Text5_Change()

Dim blnSichtbar as Boolean

Select Case Nz(Me!Text5.Text,"")
Case "42","45","48"
blnSichtbar=True
Case Else
blnSichtbar=False
End Select

Me!Befehl7.Visible = blnSichtbar
Me!Befehl8.Visible = blnSichtbar
Me!Befehl9.Visible = blnSichtbar

End Sub

tg0042
25.03.2006, 11:42
Es funktioniert !!

Dankeschön !!!