Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1388to1392
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abfrageproblem

Abfrageproblem
04.11.2014 13:32:15
Langmantl
Hallo,
meine erste Frage, ich habe eine Userform und dort sollen Uhrzeiten angegeben werden. Die Routine, mit der ich die Eingaben überprüfe habe ich schon eingebaut, bisher aber in der Routine Commandbutton after Klick. Da ich 7 Zeiten eingeben und überprüfen möchte, wäre es besser, wenn ich die Routine bereits unmittelbar nach eingabe in die Checkbox vornehmen kann. Da ich mich fast gar nicht mit VBA auskenne, wer kann mir sagen wie ich das ändern muss?
Funktioniert mit der Commandbuttonversion bisher ganz gut.
2. Frage
Wie man aus dem Code sieht, wir bei Fehler in den err_handler gesprungen. gibts eine Möglichkeit, dass der Fehler umgangen wird. Also: Wenn kein Eintrag in der Textbox kommt bisher eine MSG Box mit der Info : Wert nicht bekannt : Möchte dass aber so verändern, dass bei keinem Eintrag in der Textbox keine Fehlermeldung ausgegeben wird, damit ich später bei Leer einen Eintrag für die Tabelle definieren kann, muss aber auch für jeden Wochentag extra sein (siehe beigelegte Tabelle)
https://www.herber.de/bbs/user/93534.xlsm

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrageproblem
04.11.2014 13:59:24
Rudi
Hallo,
1. was soll das denn?
Sheets(1).Range("a16") = Clear
etc?
wenn schon, dann
Sheets(1).Range("a16").Clear
2. und das:
lngDay = Weekday(Sheets(1).Range("A5"), vb1) Or .....
schau dir mal die Syntax der WeekDay-Funktion an.
3.
Dim ch1 As String
Dim ch2 As String
Dim ch3 As String
Dim ch4 As String
Dim ch5 As String
Dim ch6 As String
Dim ch7 As String

und folgende würde ich als Datenfelder definieren
Dim ch(1 to 7) as String
Dann kannst du die per Schleife abklappern und deinen Code um min. 70% eindampfen.
Gruß
Rudi

Anzeige
AW: Abfrageproblem
04.11.2014 14:23:16
Langmantl
Hallo Rudi, danke für deinen Hinweis, wie ich die Variablen besser definieren kann.
habe ich sofort umgesetzt, bekomme aber eine Fehlermeldung: Kann Teil einer verbundenen Zelle nicht ändern. Wo ist da der Fehler?
Was du mit lngDay = Weekday(Sheets(1).Range("A5"), vb1) Or .....
meinst, weiß ich nicht, habe den Code auch nur übernommen.
Mit den Variablen, dass hat super geklappt, wird dann etwas übersichtlicher
Hier die veränderte Version: https://www.herber.de/bbs/user/93536.xlsm
Hilft mir aber auch nicht bei meiner Grundfrage:

Anzeige
AW: Abfrageproblem
04.11.2014 14:34:54
Rudi
Hallo,
du musst auch z.B.
ch1 = Me.CheckBox1
ch2 = Me.CheckBox2
ch3 = Me.CheckBox3
ch4 = Me.CheckBox4
ch5 = Me.CheckBox5
ch6 = Me.CheckBox6
ch7 = Me.CheckBox7

in
ch(1) = Me.CheckBox1
ch(2) = Me.CheckBox2
etc.
ändern.
Gruß
Rudi

AW: Abfrageproblem
04.11.2014 14:43:12
Langmantl
Hallo Rudi, danke ich habe es sofort geändert, gibts hierfür auch eine kurzfassung? also ch(1 to 7) = Me.CheckBox(1 to 7)?
ok, hier die Neufassung. Da wo er mir den Fehler anzeigt, bei den Clear befehl habe ich als Kommentar markiert
https://www.herber.de/bbs/user/93537.xlsm

Anzeige
AW: Abfrageproblem
04.11.2014 15:04:25
Rudi
Hallo,
bei den Checkboxen kann man mit einer Schleife arbeiten, da die durchgehen benannt sind.
Bei den Textboxen geht das momentan nicht. Di müsstest du in z.B. txtV1 bis txtV7; txtB1 bis txtB7; txtW1 bis txtW7 umbenennen.
Mal ein grob überarbeiteter Code:
Private Sub CommandButton1_Click()
'Variablen Definieren'
Dim ch(1 To 7) As String
Dim v(1 To 7) As String
Dim b(1 To 7) As String
Dim w(1 To 7) As String
Dim datTest(1 To 7) As Date
Dim lngDay(1 To 7) As Long
Dim lngDayS(1 To 7) As String
'Variablen den Check und Textboxen zuordnen'
For i = 1 To 7
ch(i) = Me.Controls("CheckBox" & i)
Next i
v(1) = Me.TextBox2.Text
v(2) = Me.TextBox6.Text
v(3) = Me.TextBox10.Text
v(4) = Me.TextBox15.Text
v(5) = Me.TextBox19.Text
v(6) = Me.TextBox23.Text
v(7) = Me.TextBox27.Text
b(1) = Me.TextBox3.Text
b(2) = Me.TextBox7.Text
b(3) = Me.TextBox11.Text
b(4) = Me.TextBox14.Text
b(5) = Me.TextBox20.Text
b(6) = Me.TextBox24.Text
b(7) = Me.TextBox28.Text
w(1) = Me.TextBox4.Text
w(2) = Me.TextBox8.Text
w(3) = Me.TextBox12.Text
w(4) = Me.TextBox13.Text
w(5) = Me.TextBox17.Text
w(6) = Me.TextBox21.Text
w(7) = Me.TextBox25.Text
'Alte Einträge der Tabelle löschen"
Sheets(1).Range("a16:g16") = ""
Sheets(1).Range("a18:g18") = ""
Sheets(1).Range("a23:g23") = ""
'Prüfung ob Zeit erlaubt erste Spalte'
For i = 1 To 7
On Error GoTo err_handler
If v(i)  "" Then
datTest(i) = CDate(v(i))
lngDay(i) = Weekday(Sheets(1).Cells(5, i), vb1)
lngDayS(i) = Sheets(1).Cells(8, i).Text
If lngDayS(i)  "Schließtag" And lngDayS(i)  "Feiertag" And lngDayS(i)  "Urlaub"  _
Then
If lngDay(i) 
Da ist noch Potenzial.
Gruß
Rudi

Anzeige
AW: Abfrageproblem
05.11.2014 07:38:46
Langmantl
Hallo Rudi, danke für den Code, aber hat offensichtlich Fehler, wenn ich Ihn ausführe zeigt er mir folgende Zeiten Rot an:
MsgBox "Eingabe am " & Format(Sheets(1).Cells(5, i), "ddd dd.mm") & " erst ab 15:00 _
Uhr möglich, da Arbeit", , "Hinweis..."

MsgBox "Eingabe am " & Format(Sheets(1).Cells(5, i), "ddd dd.mm") & " erst ab 13:00 _
Uhr möglich, da Arbeit", , "Hinweis..."

Dann gibts noch das Problem, wenn ich die Einträge von Montag bis Freitag, also die wo er prüft, leer lassen will, zeigt er durch den err_handler Fehler an. Wie muss es umgesetzt werden, damit auch ohne Eingabe kein Fehler ausgegeben wird? Nur wenn Zeit eingegeben wird, nur dann soll geprüft werden, wenn leer, dann ist auch leer.
Wo muss ich den Code plazieren, wenn ich die Prüfung bereits nach Eingabe ins Textfeld haben möchte und nicht erst bei Klicken auf Commandbutton?
https://www.herber.de/bbs/user/93551.xlsm

Anzeige
Rudi hat nur nicht beachtet, dass die Zeilen-...
05.11.2014 13:02:03
Luc:-?
…Automatik der ForumsSoftware keine Rücksicht auf in VBA verbotene nur-_-Trennungen innerhalb von Texten nimmt, Langmantl;
diese beiden Trennstellen müssen aufgehoben oder durch " _ in der 1. und & " in der 2.Zeile ersetzt wdn.
Gruß, Luc :-?

AW: Rudi hat nur nicht beachtet, dass die Zeilen-...
05.11.2014 13:08:22
Langmantl
Kapiere nicht was du meinst, kannst du es etwas konkreter benennen?
Automatik der ForumsSoftware keine Rücksicht auf in VBA verbotene nur-_-Trennungen innerhalb von Texten nimmt, Langmantl;
diese beiden Trennstellen müssen aufgehoben oder durch " _ in der 1. und & " in der 2.Zeile ersetzt wdn.
Gruß, Luc :-?

Anzeige
Na, genau die vom VBE beanstandeten und ...
05.11.2014 14:24:31
Luc:-?
…von dir geposteten beiden CodeAbschnitte!
Die ForumsSoftware hat die ursprünglich 1zeiligen Anweisungen automatisch umge-und dabei verbotenerweise TextSequenzen einfach unterbrochen, ohne die dafür erforderlichen Zeichen zu setzen. Also _ entfernen und jeweils 1 Zeile draus machen oder wie von mir beschrieben vorgehen!
Bsp: "abc def" → (¶ = Zeilenumbruch)
falsch:  "abc _¶def"
richtig: "abc " _¶& "def"
Luc :-?
Besser informiert mit …

Anzeige
AW: Na, genau die vom VBE beanstandeten und ...
05.11.2014 14:40:15
Langmantl
ok, Danke, das wäre dann schon mal gelöst, bleiben noch die anderen beiden Fragen,
nämlich:
1.Wie kann ich bei dieser Routine so eingeben, dass auch leereingaben (also kein Eintrag akzeptiert wird, ohne dass ein Fehler ausgegeben wird.
2. Bisher findet die Prüfung im Formular nach Eingabe des Controlbuttons statt, ich will es aber so haben, dass die Prüfung und Ausgabe der Meldung unmittelbar nach Eingabe der Uhrzeit in das Textfeld passiert, wie muss ich den Code umstellen?
Hier Code des Checkbuttons
Private Sub CommandButton1_Click()
'Variablen Definieren'
Dim ch(1 To 7) As String
Dim v(1 To 7) As String
Dim b(1 To 7) As String
Dim w(1 To 7) As String
Dim datTest(1 To 7) As Date
Dim lngDay(1 To 7) As Long
Dim lngDayS(1 To 7) As String
'Variablen den Check und Textboxen zuordnen'
For i = 1 To 7
ch(i) = Me.Controls("CheckBox" & i)
Next i
v(1) = Me.TextBox2.Text
v(2) = Me.TextBox6.Text
v(3) = Me.TextBox10.Text
v(4) = Me.TextBox15.Text
v(5) = Me.TextBox19.Text
v(6) = Me.TextBox23.Text
v(7) = Me.TextBox27.Text
b(1) = Me.TextBox3.Text
b(2) = Me.TextBox7.Text
b(3) = Me.TextBox11.Text
b(4) = Me.TextBox14.Text
b(5) = Me.TextBox20.Text
b(6) = Me.TextBox24.Text
b(7) = Me.TextBox28.Text
w(1) = Me.TextBox4.Text
w(2) = Me.TextBox8.Text
w(3) = Me.TextBox12.Text
w(4) = Me.TextBox13.Text
w(5) = Me.TextBox17.Text
w(6) = Me.TextBox21.Text
w(7) = Me.TextBox25.Text
'Alte Einträge der Tabelle löschen"
Sheets(1).Range("a16:g16") = ""
Sheets(1).Range("a18:g18") = ""
Sheets(1).Range("a23:g23") = ""
'Prüfung ob Zeit erlaubt erste Spalte'
For i = 1 To 7
'On Error GoTo err_handler'
If v(i)  "" Then
datTest(i) = CDate(v(i))
lngDay(i) = Weekday(Sheets(1).Cells(5, i), vb1)
lngDayS(i) = Sheets(1).Cells(8, i).Text
If lngDayS(i)  "Schließtag" And lngDayS(i)  "Feiertag" And lngDayS(i)  "Urlaub" _
Then
If lngDay(i) 
Hier Code Userform_activate
Private Sub UserForm_Activate()
'Datum auslesen und als Wochentage ins Formular schreiben'
Me.TextBox1 = Sheets(1).Range("A5").Value
TextBox1.Value = Format(TextBox1.Value, "ddd dd.mm")
Me.TextBox5 = Sheets(1).Range("B5").Value
TextBox5 = Format(TextBox5.Value, "ddd dd.mm")
Me.TextBox9 = Sheets(1).Range("C5").Value
TextBox9 = Format(TextBox9.Value, "ddd dd.mm")
Me.TextBox16 = Sheets(1).Range("D5").Value
TextBox16 = Format(TextBox16.Value, "ddd dd.mm")
Me.TextBox18 = Sheets(1).Range("E5").Value
TextBox18 = Format(TextBox18.Value, "ddd dd.mm")
Me.TextBox22 = Sheets(1).Range("F5").Value
TextBox22 = Format(TextBox22.Value, "ddd dd.mm")
Me.TextBox26 = Sheets(1).Range("g5").Value
TextBox26 = Format(TextBox26.Value, "ddd dd.mm")
'Wochentagseintrag prüfen und bei Frei, Urlaub, Schließtag die Checkbutton und das  _
Beschriftungslabel ausblenden'
If Sheets(1).Range("A8").Value = "Frei" Or Sheets(1).Range("A8").Value = "Feiertag" Or Sheets(1) _
.Range("A8").Value = "Schließtag" Then
CheckBox1.Visible = False
Label2.Visible = False
Else
CheckBox1.Visible = True
Label2.Visible = True
End If
If Sheets(1).Range("B8").Value = "Frei" Or Sheets(1).Range("B8").Value = "Feiertag" Or Sheets(1) _
.Range("B8").Value = "Schließtag" Then
CheckBox2.Visible = False
Label7.Visible = False
Else
CheckBox2.Visible = True
Label7.Visible = True
End If
If Sheets(1).Range("c8").Value = "Frei" Or Sheets(1).Range("c8").Value = "Feiertag" Or Sheets(1) _
.Range("c8").Value = "Schließtag" Then
CheckBox3.Visible = False
Label9.Visible = False
Else
CheckBox3.Visible = True
Label9.Visible = True
End If
If Sheets(1).Range("d8").Value = "Frei" Or Sheets(1).Range("d8").Value = "Feiertag" Or Sheets(1) _
.Range("d8").Value = "Schließtag" Then
CheckBox4.Visible = False
Label19.Visible = False
Else
CheckBox4.Visible = True
Label19.Visible = True
End If
If Sheets(1).Range("e8").Value = "Frei" Or Sheets(1).Range("e8").Value = "Feiertag" Or Sheets(1) _
.Range("e8").Value = "Schließtag" Then
CheckBox5.Visible = False
Label23.Visible = False
Else
CheckBox5.Visible = True
Label23.Visible = True
End If
If Sheets(1).Range("f8").Value = "Frei" Or Sheets(1).Range("f8").Value = "Feiertag" Or Sheets(1) _
.Range("f8").Value = "Schließtag" Then
CheckBox6.Visible = False
Label36.Visible = False
Else
CheckBox6.Visible = True
Label36.Visible = True
End If
If Sheets(1).Range("g8").Value = "Frei" Or Sheets(1).Range("g8").Value = "Feiertag" Or Sheets(1) _
.Range("g8").Value = "Schließtag" Then
CheckBox7.Visible = False
Label37.Visible = False
Else
CheckBox7.Visible = True
Label37.Visible = True
End If
Me.TextBox2.SetFocus
End Sub

Anzeige
Warum verwendest du dann kein TextBox-...
07.11.2014 03:42:14
Luc:-?
…Ereignis dafür, Langmantl,
die haben auch mehrere. Wähle im VBE links oben die entsprd TextBox aus und rechts oben dann das passende Ereignis dazu. IdR dürfte das nicht das Standard-Ereignis …_Change sein, das wird mit Eingabe jedes einzelnen Zeichens ausgelöst, sondern …_Exit.
Morrn, Luc :-?

AW: Warum verwendest du dann kein TextBox-...
07.11.2014 08:30:24
Langmantl
Danke für den Hinweiß

Bitte sehr! owT
07.11.2014 12:37:35
Luc:-?
:-?

AW: Bitte sehr! owT
07.11.2014 12:40:21
Langmantl
ok, danke

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige