PDA

Vollständige Version anzeigen : Eingabeprüfung


semmel13
25.02.2008, 18:48
Hallo zusammen,

hab schon im Forum gesucht, jedoch nichts passendes gefunden. Hab folgendes Problem.

Es wird in einer Zelle ein Datum mit Uhrzeit in folgendem Format angeben: TT.MM.JJJJ hh:mm

Nun möchte ich abfangen, dass die Uhrzeit nicht kleiner 8:00 Uhr sein darf! Also wenn ich z.B. 02.02.2008 7:50 eingebe, soll der Wert automatisch auf 02.02.2008 8:00 geändert werden!!

Ich habe keine Ahnung wie ich das machen soll und hoffe mir kann jemand helfen!?

Vielen Dank schon mal.

MFG
semmel

pefeu
25.02.2008, 21:09
Hallo Semmel,

so könnte es gehen, wobei das Makro die Eingabe der gesamten Spalte A überwacht, was du ggf. anpassen musst.

<FONT FACE="Arial,FixedSys"Size=2>
<Blockquote>
<FONT COLOR=#0000FF>Private Sub</FONT>&nbsp;Worksheet_Change(<FONT COLOR=#0000FF>ByVal</FONT>&nbsp;Target&nbsp;<FONT COLOR=#0000FF>As</FONT>&nbsp;Range)

<FONT COLOR=#0000FF>Dim</FONT>&nbsp;dDatum&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>As</FONT>&nbsp;Date
<FONT COLOR=#0000FF>Dim</FONT>&nbsp;dUhrzeit&nbsp;&nbsp;<FONT COLOR=#0000FF>As Double</FONT>

&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>If</FONT>&nbsp;Target.Column&nbsp;&lt;&gt;&nbsp;1&nbsp;<FONT COLOR=#0000FF>Then Exit Sub</FONT>

&nbsp;&nbsp;&nbsp;dDatum&nbsp;=&nbsp;DateSerial(Year(Target.Value),&nbsp;Month(Target.Value),&nbsp;Day(Target.Value ))
&nbsp;&nbsp;&nbsp;dUhrzeit&nbsp;=&nbsp;Target.Value&nbsp;-&nbsp;dDatum

&nbsp;&nbsp;&nbsp;Application.EnableEvents&nbsp;=&nbsp;<FONT COLOR=#0000FF>False</FONT>

&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>If</FONT>&nbsp;dUhrzeit&nbsp;&lt;&nbsp;0.333333333335759&nbsp;<FONT COLOR=#0000FF>Then</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Target.Value&nbsp;=&nbsp;dDatum&nbsp;&amp;&nbsp;"&nbsp;08:00"
&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>End If</FONT>

&nbsp;&nbsp;&nbsp;Application.EnableEvents&nbsp;=&nbsp;<FONT COLOR=#0000FF>True</FONT>

<FONT COLOR=#0000FF>End Sub</FONT>&nbsp;

</Blockquote>
<FONT FACE="Courier New,FixedSys"Size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.4</a></b></FONT>
<FONT FACE="Arial,FixedSys"Size=2>

Das Makro gehört in das Klassenmodul des betreffenden Tabellenblattes.

Gruß Peter

pefeu
25.02.2008, 21:37
Hallo Semmel,

eine kleine Korrektur:

If dUhrzeit < 0.333333333335759 Then
Target.Value = dDatum + 0.333333333335759
End If

Gruß Peter

semmel13
26.02.2008, 13:41
Hi,

danke erst mal für deine Antwort.

ich komme leider nicht damit zurecht; Bin absoluter Anfänger in Sachen vba in Excel :(
Wie weiß ich das genau einer Zelle bzw. einer Spalte zu?? Also wenn jetzt z.B. in der Zelle C3 ein Datum (TT.MM.JJJJ hh:mm) eingegeben wird und die Uhrzeit z.B. 7:30 ist, dass dann die Uhrzeit automatisch direkt nach Eingabe auf 8:00 gesetzt wird??

Hoffe ihr versteht mich..

Danke schon mal.

MFG
semmel

IngGi
26.02.2008, 14:28
Hallo semmel13,

für die Zelle C3 ersetzt du bitte
If Target.Column <> 1 Then Exit Subdurch
If Target.Address <> "$C$1" Then Exit SubDas Makro muss in das Codemodul des betreffenden Tabellenblattes. Dorthin gelangst du durch einen Rechtsklick auf den Tabellenblattreiter und anschließende Auswahl des Punktes "Code anzeigen" im Kontextmenü.

Gruß Ingolf

pefeu
26.02.2008, 14:38
Hallo Semmel,

hier findest du eine Mustermappe, in der das in Tabelle1 exakt für Zelle C3 funktioniert,
in Tabelle2 aber für die ganze Spalte A.
in Tabelle3 für den Bereich A1:B12

Sehen kannst du die Makros, indem du mit Rechtsklick auf den Tabellenblattreiter klickst
dann mit Linksklick auf Code anzeigen

Gruß Peter

semmel13
27.02.2008, 07:35
Hallo zusamme,

vielen für die Hilfe, es funktioniert auch einwandfrei, lediglich ein kleines Problem besteht noch, wenn ich in eine Zelle ein Datum eingetragen wird ja dieser Wert dann auf 8:00 Uhr geändert (wenn kleiner 8)

Nun kann ich aber die Zelle nicht mehr leeren?? da steht dann immer '8:00:00 AM' drin. Und wenn ich die Zeile löschen möchte bringt er einen Laufzeitfehler 13 - Typen unverträglich! :upps:

Danke schon mal.

MFG
semmel

IngGi
27.02.2008, 09:05
Hallo Semmel,

wenn du
If Target.Column <> 1 Then Exit Sub
durch
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
ersetzt, kannst du Zeilen wieder löschen oder Einfügen. Und wenn du nach dieser Zeile noch folgende Zeile einfügst, dann kannst du die Zellen in Spalte A auch wieder "ungestraft" leeren.
If Target = "" Then Exit Sub
Gruß Ingolf