2012-03-29 13 views
2

Ich habe ein Benutzerformular, das den Benutzer erfordert, ein bestimmtes Datum und Uhrzeit über zwei separate Kombinationsfelder, cboStartDate, cboStartTime einzugeben. Der Benutzer muss außerdem die Dauer in einem Textfeld, txtDuration, eingeben.Excel VBA Zeitspezifischen Wert in Zelle von Benutzerformular speichern

Nach dem Speichern werden Startdatum und -uhrzeit in einer formatierten Zelle [TT/MM/JJJJ HH: MM AM/PM] gespeichert. Das Enddatum und die Endzeit werden aus dem Dauerfeld berechnet und in einer anderen Zelle mit derselben Formatierung gespeichert. Etwas wie folgt aus:

 
+-----------------------+-----------------------+ 
| startTime    | endTime    | 
+-----------------------+-----------------------+ 
| 2/4/2012 11:30:00 AM | 2/4/2012 2:00:00 PM | 
+-----------------------+-----------------------+ 

Doch nach der Userform durch läuft, wird die Startzeit nicht gespeichert ist, und die Endzeit wird nicht berechnet. Etwas wie folgt aus:

 
+-----------------------+-----------------------+ 
| startTime    | endTime    | 
+-----------------------+-----------------------+ 
| 2/4/2012 12:00:00 AM | 2/4/2012 12:00:00 AM | 
+-----------------------+-----------------------+ 

Unten ist mein Teil meiner VBA-Code:

Dim iRow As Long 
Dim ws As Worksheet 
Dim startDate As Date 
Dim unFmtStartDuration() As String 
Dim startDuration As Double 
Dim minTest As Integer 
Dim endDate As Date 
Dim endDuration As Double 

Set ws = Worksheets("EVENTS") 

'Search for the last row in the worksheet 
iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 

'Date manipulation and set start and end timings 
unFmtStartDuration() = Split(cboStartTime.Text, ":") 
startDuration = unFmtStartDuration(0) 
If unFmtStartDuration(1) = "00" Then 
    minTest = 0 
Else 
    minTest = unFmtStartDuration(1) 
    If minTest = 30 Then 
     startDuration = startDuration + 0.5 
    End If 
End If 
startDate = DateValue(DateAdd("h", startDuration, cboDate.Text & " 12:00AM")) 
ws.Cells(iRow, 4).Value = startDate 
endDuration = txtDuration.Value 
endDate = DateValue(DateAdd("h", endDuration, startDate)) 
ws.Cells(iRow, 5).Value = endDate 

So wie kann ich diesen Teil aussortiert? Würde mich über jede Hilfe freuen. Vielen Dank.

P.S. Möchte hier Screenshots posten, aber mein Ruf ist hier zu gering. Es tut uns leid.

Antwort

2

Es sieht aus wie Sie nur die Zeit hinzufügen, wenn minTest = 30, aber dieser Wert variiert wahrscheinlich ziemlich viel. In einer Instanz vergleichen Sie eine Zeichenfolge und eine andere Zahl, wenn Sie auf unFmtStartDuration verweisen, was zwar funktionieren kann, aber beim Lesen Ihres Codes verwirrend ist.

Ihre aktuelle Methode zu folgen, verwenden

startDuration = Val(unFmtStartDuration(0) + Round(Val(unFmtStartDuration(1))/60, 2) 

diese Sie verwenden, anstatt sich auf Dies wird nehmen, was die Zeit ist, und wandelt es in die Dezimalform

startDuration = unFmtStartDuration(0) 
If unFmtStartDuration(1) = "00" Then 
    minTest = 0 
Else 
    minTest = unFmtStartDuration(1) 
    If minTest = 30 Then 
     startDuration = startDuration + 0.5 
    End If 
End If 

zu ersetzen die 30 übereinstimmen. (Es sei denn, dass speziell benötigen. Wenn ja, sagen so, wie ich das denken kann nach wie vor mit Rundungs ​​Tricks arrangiert werden.)

Aber ich denke, eine bessere Option

startDuration = TimeValue(cboStartTime.Text) * 24 

So wäre die Verwendung nicht andere Mathe oder Schecks sind beteiligt.

auch, es sei denn cboStartTime.Text (und anschließend startDuration) mehr als 24 Stunden ist, diese

startDate = DateValue(DateAdd("h", startDuration, cboDate.Text & " 12:00AM")) 

wird immer das Datum gerecht eingesandt in cboDate.Text mit einer stillschweigenden 00.00.00. Um dies zu korrigieren, werden Sie wollen

startDate = DateAdd("h", startDuration, cboDate.Text & " 12:00AM") 

Ich denke, es etwas mehr zu ändern ist zu beheben, aber hoffentlich bekommt man in der richtigen Richtung ...

+0

Danke für die schnelle Antwort! Ich habe die 'TimeValue()' -Funktion anfangs nicht berücksichtigt, da ich mit VBA ziemlich neu bin. Benutzte es in den Codes und es ist schön. Trotzdem, danke für deine Hilfe! Es funktioniert jetzt gut ... By the way, irgendwie die "DateAdd" -Funktion konnte 0,5 in h aus bestimmten Gründen nicht hinzufügen ... Zuflucht zu den StartTime und EndTime in Stunden und Minuten anstatt als eine schnelle Lösung aufgeteilt. P.S.Ich wünschte, dass ich upvote, noch einmal rep ist zu niedrig ... :( –

+0

+1 Nice one Gaffi :) –

+0

Danke, @SiddharthRout. Und mach dir keine Sorgen Robert; Bleib herum und du wirst dort in rep stehen. :-) – Gaffi

Verwandte Themen