Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
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

Datum schreiben

Datum schreiben
Wolf
Hallo zusammen,
ich bin heute das erste Mal hier im Forum und bräuchte etwas Hilfe beim Formatieren des Datums. Ich habe folgendes Problem:
Über ein UserForm wird u.a auch ein eingegebenes Datum in die Tabelle geschrieben. Das funktioniert noch. Wenn ich diese Zellen jedoch mit der Summenprodukt-Funktion auswerten will, wird das so geschriebene Datum nicht erkannt. Gebe ich das Datum direkt in die Zelle ein so wird es erkannt. Die Zellen sind mit Datum formatiert.
Kennt jemand eine Lösung für das Problem ?
Gruß Wolf
Text umwandeln
04.06.2010 20:47:15
Steffen
Hallo wolf,
wandle den Text von der Textbox in der Userform um mit "CDate "
Bsp:
Cells(1, 1) = CDate(Me.TextBox1)
Grüße
Steffen
AW: Text umwandeln
04.06.2010 21:03:22
Wolf
Hallo Steffen,
leider sind meine VBA Kenntnisse trotz vieler Versuche immer noch miserabel. Mit dem folgenden Code werden die Daten in die Tabelle geschrieben:
Sub data_save()
sDataNeu(0) = UserForm1.TextBox1.Text       'Firmenname
sDataNeu(1) = UserForm1.TextBox2.Text       'Straße und Hausnummer
sDataNeu(2) = UserForm1.TextBox3.Text       'PLZ
sDataNeu(3) = UserForm1.TextBox4.Text       'Ort
sDataNeu(4) = UserForm1.TextBox5.Text       'Versanddatum
sDataNeu(5) = UserForm1.TextBox6.Text       'Preis
Dim m As Integer                            'Inhalt der variable in Tabelle schreiben
For m = 0 To 10                             'Spalten A bis J
ActiveSheet.Cells(lZeile, m + 1).Value = sDataNeu(m)
Next m
End Sub
sDataNeu() ist in diesem Fall als variant deklariert.
Wie müsste der Code angepasst werden?
Anzeige
so...
04.06.2010 21:09:17
Steffen
Hi Wolf
*********************************************************
Sub data_save()
sDataNeu(0) = UserForm1.TextBox1.Text       'Firmenname
sDataNeu(1) = UserForm1.TextBox2.Text       'Straße und Hausnummer
sDataNeu(2) = UserForm1.TextBox3.Text       'PLZ
sDataNeu(3) = UserForm1.TextBox4.Text       'Ort
sDataNeu(4) = CDate(UserForm1.TextBox5)       'Versanddatum
sDataNeu(5) = UserForm1.TextBox6.Text       'Preis
Dim m As Integer                            'Inhalt der variable in Tabelle schreiben
For m = 0 To 10                             'Spalten A bis J
ActiveSheet.Cells(lZeile, m + 1).Value = sDataNeu(m)
Next m
End Sub

**********************************************************
Grüße
Steffen
Anzeige
AW: so...
04.06.2010 22:04:15
Wolf
Hallo Steffen,
vielen Dank für Deine Hilfe. Hat in meiner Bespieldatei erstmal wunderbar funktioniert. Allerdings erhalte ich den Laufzeitfehler 13 ("Typen unverträglich"), wenn das Datumfeld leer ist. Ich hab es jetzt allerdings nur mit Excel 2007 probiert. Die Datei muss aber unter Excel 2000 laufen.
Gruß Wolf
Fehlerabfangen
04.06.2010 22:14:44
Steffen
Eine leere Textbox kann nicht in ein Datumswert umgewandelt werden,da musst du den Fehler abfangen z.b. so in der Art:
*************************************************
If UserForm1.TextBox5 = "" Then
MsgBox "Bitte Datum Eingeben"
Exit Sub
Else
sDataNeu(4) = CDate(UserForm1.TextBox5) 'Versanddatum
End If
****************************************************
Grüße
Steffen
Anzeige
AW: Fehlerabfangen
04.06.2010 22:29:53
Wolf
Hallo Steffen,
damit müsste aber immer ein Datum eingegeben werden. In den meisten Fällen stehen diese Termine zum Zeitpunkt des Speicherns der Daten noch nicht fest.
Gruß Wolf
=SUMMENPRODUKT(($A$5:$A$13*1=....
silex1
Hallo,
da Du nix über das SUMMENPRODUKT verrätst, hier ne Bsp. Formel. Das *1 machts:
 ABC
5 x2
6 x0
721.4.10x 
8 x 
940236x 
1021.4.10x 
11 x 
12 x 

ZelleFormel
C5=SUMMENPRODUKT(($A$5:$A$13*1=40289)*($B$5:$B$13="x"))
C6=SUMMENPRODUKT(($A$5:$A$13=40289)*($B$5:$B$13="x"))
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

VG, Rene
Anzeige
das stimmt nicht...
04.06.2010 22:13:09
Jockel
hi Rene, was willst du uns hiermit sagen..? was soll hier das *1 machen? das ist hier so überflüssig, wie ein kropf...
Tabelle2
 ABC
5  x2
6  x2
721.04.2010x 
8  x 
940236x 
1021.04.2010x 
11  x 
12  x 

verwendete Formeln
Zelle Formel Bereich
C5 =SUMMENPRODUKT(($A$5:$A$13*1=40289)*($B$5:$B$13="x")) 
C6 =SUMMENPRODUKT(($A$5:$A$13=40289)*($B$5:$B$13="x")) 

Tabellendarstellung in Foren Version 5.28



cu jörg eine rückmeldung wäre ganz reizend
Anzeige
Jedem sein Kropf...
silex1
Hallo,
 ABC
5 x2
6 x0
721.04.10xWAHR
8 xFALSCH
940236xFALSCH
1021.04.10xWAHR
11 xFALSCH
12 xFALSCH

ZelleFormel
C5=SUMMENPRODUKT(($A$5:$A$13*1=40289)*($B$5:$B$13="x"))
C6=SUMMENPRODUKT(($A$5:$A$13=40289)*($B$5:$B$13="x"))
C7=ISTTEXT(A7)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

VG, Rene
Anzeige
sorry...
04.06.2010 23:17:47
Jockel
hi Rene, das mit dem text hatte ich geflissendlich übersehen... nix für ungut... gruß jörg
AW: =SUMMENPRODUKT(($A$5:$A$13*1=....
04.06.2010 22:13:56
Wolf
Hallo Rene,
ich verwende summenprodukt wie folgt:
=SUMMENPRODUKT((('Stornos'!I7:I686)>=DATUM(B13;1;1))*(('Stornos'!I7:I686) In der Spalte B stehen die Werte nach denen Ausgewertet werden soll; so z.B. in B13 das Jahr 2010. Es sollen so alle Ereignisse im Jahr 2010 gezählt werden.
Gruß Wolf
AW: =SUMMENPRODUKT(($A$5:$A$13*1=....
04.06.2010 22:21:11
Jockel
hi Wolf, guck mal... =SUMMENPRODUKT((JAHR(Stornos!I7:I686)=B13)*1)

cu jörg eine rückmeldung wäre ganz reizend
Anzeige
AW: =SUMMENPRODUKT(($A$5:$A$13*1=....
04.06.2010 22:39:44
Wolf
Hallo Jörg,
deine Formel liefert mir leider nur die Fehlermeldung "#Wert" zurück. In der Zelle B 13 steht bei mir nur die Zahl 2010. Trotzdm danke.
Gruß Wolf
Buchstäbchen on Board...
silex1
Hallo Wolf,
dann sind "reguläre" Buchstaben vorhanden! #WERT kommt nur beim Vorhandensein dieser!
 ABCD
5  #WERT! 
6  12010
721.04.201022.04.2010  
8    
9meier   
1021.04.1021.04.11  
1112  

ZelleFormel
C5=SUMMENPRODUKT((JAHR($A$5:$A$13)=$D$6)*1)
C6=SUMMENPRODUKT((JAHR($B$5:$B$13)=$D$6)*1)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Evtl. die Zahlen in ne Hilfsspalte packen und dann novhmel mit SUMMENPRODUKT() abfragen.
 ABCDE
5  #WERT!  
6  12010 
721.04.201022.04.20102 40289
8    0
9meier   0
1021.04.1021.04.11  40289
1112  1

ZelleFormel
C5=SUMMENPRODUKT((JAHR($A$5:$A$13)=$D$6)*1)
C6=SUMMENPRODUKT((JAHR($B$5:$B$13)=$D$6)*1)
C7=SUMMENPRODUKT((JAHR($E$5:$E$13)=$D$6)*1)
E7=WENN(ISTZAHL(A7*1);A7*1;0)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Könnte aber auch in eine Formel! Glaub ich...!
VG, Rene
Anzeige
AW: Datum schreiben
04.06.2010 22:01:12
Gerd
Hallo Wolf!
Sub data_save()
sdataNeu(0) = UserForm1.TextBox1.Text       'Firmenname
sdataNeu(1) = UserForm1.TextBox2.Text       'Straße und Hausnummer
sdataNeu(2) = UserForm1.TextBox3.Text       'PLZ
sdataNeu(3) = UserForm1.TextBox4.Text       'Ort
sdataNeu(4) = CDate(UserForm1.TextBox5.Text)       'Versanddatum
sdataNeu(5) = CCur(UserForm1.TextBox6.Text)       'Preis
'Inhalt der variable in Tabelle schreiben
'Spalten A bis F
ActiveSheet.Range(ActiveSheet.Cells(lZeile, 1), ActiveSheet.Cells(lZeile, 6)) = sdataNeu
End Sub
Gruß Gerd
AW: Datum schreiben
04.06.2010 22:20:45
Wolf
Hallo Gerd,
danke für den Tipp, aber auch hier erhalte ich den Laufzeitfehler 13, wenn die Textbox leer geblieben ist.
Greuß Wolf
Anzeige
AW: Datum schreiben
04.06.2010 22:54:20
Gerd
Hallo Wolf,
ob es Sinn macht, dass die Prozedur läuft, wenn Daten fehlen, lasse ich dahingestellt.
Sub data_save()
With Userform1
sdataNeu(0) = .TextBox1.Text       'Firmenname
sdataNeu(1) = .TextBox2.Text       'Straße und Hausnummer
sdataNeu(2) = .TextBox3.Text       'PLZ
sdataNeu(3) = .TextBox4.Text       'Ort
sdataNeu(4) = IIf(IsDate(.TextBox5.Text) = True, CDate(.TextBox5.Text), "")   'Versanddatum
sdataNeu(5) = IIf(IsNumeric(.TextBox6.Text) = True, CCur(.TextBox6.Text), "")   'Preis
End With
'Inhalt der variable in Tabelle schreiben
'Spalten A bis F
ActiveSheet.Range(ActiveSheet.Cells(lZeile, 1), ActiveSheet.Cells(lZeile, 6)) = sdataNeu
End Sub
Gruß Gerd
hast du das getestet?
04.06.2010 23:14:59
Steffen
Hallo Gerd
sdataNeu(4) = IIf(IsDate(.TextBox5.Text) = True, CDate(.TextBox5.Text), "") 'Versanddatum

ich hatte damit auch rumexperimentiert,liefert aber auch den Laufzeitfehler.
Es werden doch beide (True u False Part) bei "IIF" ausgewertet wenn ich mich nicht irre? ..und somit liefert dann CDate den Fehler .
***************************************************************
If IsDate(UserForm1.TextBox5) Then
sDataNeu(5) = CDate(UserForm1.TextBox5)
Else
MsgBox "kein gültiges Datum!"
End If
**************************************************************
Grüße
Steffen
AW: hast du das getestet?
04.06.2010 23:39:50
Gerd
Hallo Steffen,
nein, sollte man aber. In der Langversion schreiben, ist jedoch auch kein Thema.
Sub data_save()
With Userform1
sdataNeu(0) = .TextBox1.Text       'Firmenname
sdataNeu(1) = .TextBox2.Text       'Straße und Hausnummer
sdataNeu(2) = .TextBox3.Text       'PLZ
sdataNeu(3) = .TextBox4.Text       'Ort
If IsDate(.TextBox5.Text) then sdata(4)= CDate(.TextBox5.Text)    'Versanddatum
If IsNumeric(.TextBox6.Text) Then sdata(5)= CCur(.TextBox6.Text)   'Preis
End With
'Inhalt der variable in Tabelle schreiben
'Spalten A bis F
ActiveSheet.Range(ActiveSheet.Cells(lZeile, 1), ActiveSheet.Cells(lZeile, 6)) = sdataNeu
End Sub
Gruß Gerd
ich möcht auch mal mein Glück versuchen
05.06.2010 11:29:35
Oberschlumpf
Hi Wolf, Hi die Anderen
Wolf, versuch mal so:
Sub data_save()
sDataNeu(0) = UserForm1.TextBox1.Text       'Firmenname
sDataNeu(1) = UserForm1.TextBox2.Text       'Straße und Hausnummer
sDataNeu(2) = UserForm1.TextBox3.Text       'PLZ
sDataNeu(3) = UserForm1.TextBox4.Text       'Ort
If IsDate(UserForm1.TextBox5.Text) And UserForm1.TextBox5.Text  "" Then        ' _
Versanddatum
sDataNeu(4) = CDate(UserForm1.TextBox5.Text)
Else
sDataNeu(4) = UserForm1.TextBox5.Text
End If
sDataNeu(5) = UserForm1.TextBox6.Text       'Preis
Dim m As Integer                            'Inhalt der variable in Tabelle schreiben
For m = 0 To 10                             'Spalten A bis J
ActiveSheet.Cells(lZeile, m + 1).Value = sDataNeu(m)
Next m
End Sub

Der Knackpunkt ist, glaube ich, dass IsDate() auch dann WAHR zurück gibt, wenn das geprüfte Objekt leer ist.
Mit meiner Idee wird TextBox5 nur dann in Datum umgewandelt, wenn a) der Inhalt ein gültiges Datum darstellt und b) auch wirklich einen Wert enthält.
Wenn nicht Datum und/oder leer, dann wird TextBox5 einfach so ans Array übergeben.
Das Else könnte man auch ganz weg lassen, denn sDataNeu(4) bleibt ja so oder so leer.
Hilfts denn?
Ciao
Thorsten
AW: ich möcht auch mal mein Glück versuchen
05.06.2010 20:48:26
Wolf
Hi Thorsten,
bin jetzt erst dazugekommen Deinen Vorschlag auszuprobieren. Aber leider erzeugt dieser auch nur den Laufzeitfehler 13 ("Typen unverträglich")
Gruß Wolf
AW: ich möcht auch mal mein Glück versuchen
05.06.2010 22:56:19
Gerd
Hallo Wolf,
stelle mal im Editor unter Extras - Optionen - Allgemein die Fehlerbehandlung auf
"In Klassenmodul" damit Du nur noch den Laufzeitfehler 9 in der letzten Codezeile erhältst,
weil die Schleife die Anzahl der Items des Arrays übersteigt (6).
Vorausgesetzt natuerlich sDateiNeu u. lZeile sind richtig deklariert.
Meinen Code hatte ich nebenbei geändert.
Gruß Gerd
AW: ich möcht auch mal mein Glück versuchen
06.06.2010 00:41:54
Oberschlumpf
Hi Wolf
Versuch es mal mit diesem Code:
Sub data_save()
sDataNeu(0) = UserForm1.TextBox1.Text       'Firmenname
sDataNeu(1) = UserForm1.TextBox2.Text       'Straße und Hausnummer
sDataNeu(2) = UserForm1.TextBox3.Text       'PLZ
sDataNeu(3) = UserForm1.TextBox4.Text       'Ort
sDataNeu(4) = UserForm1.TextBox5.Text       'Versanddatum
sDataNeu(5) = UserForm1.TextBox6.Text       'Preis
Dim m As Integer                            'Inhalt der variable in Tabelle schreiben
For m = 0 To 10                             'Spalten A bis J
If IsDate(sDataNeu(m)) And sDataNeu(m)  "" Then
ActiveSheet.Cells(lZeile, m + 1).Value = CDate(sDataNeu(m))
Else
ActiveSheet.Cells(lZeile, m + 1).Value = sDataNeu(m)
End If
Next m
End Sub
Hier wird erst bei Übergabe an die Zellen ein String in ein Datum umgewandelt.
Und wenn das auch nicht hilft, dann zeig uns doch mal (d)eine (Bsp-)Datei - mit Bsp-Daten - mit Erklärung, was wann wie wo warum nicht funktioniert.
Ok - das warum musste nich erklären, das versuchen ja wir die ganze Zeit ;-)
Ciao
Thorsten
AW: Datum schreiben
06.06.2010 19:43:58
Wolf
Hallo zusammen,
ich habe mittlerweile den folgenden 'Workaround' für das Problem gefunden:
If UserForm1.TextBox5.Value "" Then
sDataNeu(4) = CDate(UserForm1.TextBox5.Text)
Else
sData(4) = " "
End If
Das funktioniert soweit ganz gut (zumindest für meine Bedürfnisse). Allerdings hat sich beim Testen ein weiteres und wesentlich schwerwiegenderes Problem aufgetan. Ich werde hierzu einen neuen Beitrag aufmachen und dann auch eine Beispieldatei befügen.
Vielen Dank noch Mal an alle für die Tipps.
Gruß Wolf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige