2017-05-24 3 views
0

mein Benutzerformular verfügt über drei separate Kombinationsfelder für die Benutzer, um die folgenden auszuwählen: Jahr, Monat, Datum (sie sind nicht abhängig). Wenn der Benutzer beispielsweise 2017 (das Jahr), Mai (den Monat) und 23 (den Tag) auswählt, möchte ich, dass die vba in die zweite Spalte meines Datenbankblatts eintritt: "2017/05/23". Ich will es genau in diesem Format als Wert.Kombinationsfeld in einem Datumsformat

Der folgende Code funktioniert nicht. Jede Hilfe wäre willkommen.

+2

Protip: "funktioniert nicht" wa nicht sehr gut ist, y um zu beschreiben, was dein Code macht. "produziert unerwarteten Müll" wäre genauer. Im Allgemeinen möchten Sie vermeiden, dass "mein Code nicht funktioniert" in SO-Fragen und stattdessen * beschreiben *, was Sie erhalten - Müllausgabe, Laufzeitfehler usw. –

+1

Haben Sie eine Datenüberprüfung? hindert mich daran, '2017/02/29' oder' 2017/04/31' auszuwählen? Gibt es einen bestimmten Grund, warum Sie kein Kalender-Steuerelement verwenden möchten, das dies für Sie bereitstellt? – FreeMan

Antwort

3

Sie teilen das Jahr durch den Monat und teilen das dann durch den Tag. Das ist der Wert, den deine Zelle bekommt.

Erstellen Sie stattdessen ein aktuelles Datum.

.Cells(lRow, 2).Value = DateSerial(cboYear, cboMonth, cboDay) 

Und dann Format, das jede mögliche Weise, datieren Sie es wünschen, mit NumberFormat:

.Cells(lRow, 2).NumberFormat = "yyyy/MM/dd" 

DateSerial erwartet ganzzahlige Werte. Wenn Ihre cboMonth Strings (Monatsnamen) enthält, dann müssen Sie es ein bisschen härter arbeiten - die einfachste ist wahrscheinlich nur eine Schlüssel Sammlung verwenden - einen String-Schlüssel angeben, wenn .Add die ganzen Zahlen der Sammlung ing:

Static months As Collection 
If months Is Nothing Then 
    Set months = New Collection 
    With months 
     .Add 1, "January" 
     .Add 2, "February" 
     .Add 3, "March" 
     '... 
     .Add 12, "December" 
    End With   
End If 

Und dann haben Sie eine einfache Lookup:

Dim monthId As Integer 
monthId = months(cboMonth) 

So Ihre DateSerial wäre:

.Cells(lRow, 2).Value = DateSerial(cboYear, monthId, cboDay) 
+0

Danke Mat, aber es gibt eine 'Laufzeitfehler 13. Typ nicht übereinstimmen'. Irgendwelche Ideen warum? – thankseveryone

+0

Was ist in diesen Drop-downs? 'DateSerial' erwartet Ganzzahlen. Wenn Ihr Dropdown-Menü für den Monat "Mai" enthält, benötigen Sie eine Möglichkeit, dies mit "5" zu verbinden. Erwägen Sie, zwei Spalten in Ihrem Dropdown-Feld zu haben, wobei die erste die Breite 0 ist und die Werte 1 bis 12 enthält. Die zweite enthält die Monatsnamen. Verwenden Sie die Combobox "Value", um die ausgewählte Ganzzahl zu erhalten. Wenn dies nicht möglich ist, könnte ein Keyed 'Collection'-Mapping' May' (String-Schlüssel) auf '5' (Integer-Wert) ebenso gut funktionieren. –

+0

Ja ich habe April, Mai, Juni usw. bis März und keine ganzen Zahlen. Ich bin mir nicht sicher, ob ich verstehe, wie eine Keyed Collection funktionieren würde. Wenn Sie den Code dafür anzeigen könnten, wäre das sehr hilfreich. Danke – thankseveryone

Verwandte Themen