PDA

Vollständige Version anzeigen : VBA, Variable falsch ?


mücke
22.02.2008, 14:59
Hallo Zusammen,

hab da mal ne kurze Frage.

Anbei ein Code mit einer Variable A die nicht funktioniert.
A soll mir das Alter der Person errechnen.

Dim lzw As Interior 'letzte Zeile mit Wert
Dim efz As Integer 'erste freie Zelle
Dim j As Integer 'Jahr
Dim a As Integer 'Alter

Private Sub CBut_übernahme_Click()

j = Sheets("Geburtstage").Cells(1, 1)
a = Sheets("Geburtstage").Cells(1, 1) - Year(Cells(efz, 2))

efz = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(efz, 1) = txt_Name
Cells(efz, 2) = txt_GebDatum
Cells(efz, 3) = a

End Sub
Wenn ich den Code wie folgt ändere..
...
Cells(efz, 3) = j - Year(Cells(efz, 2))
...
funktioniert es, warum ???
Kann ich keine Variante A hinterlegen?

Für eine Feedback schon mal besten Dank!
Gruß Mücke

EarlFred
22.02.2008, 15:08
Hallo Mücke,
in der Zeile
a = Sheets("Geburtstage").Cells(1, 1) - Year(Cells(efz, 2))

greifst Du auf eine Zelle (efz, 2) zu. efz ist aber noch nicht definiert, also sucht er in Zeile 0 - die gibt's aber nicht ;)

Verschieb diese Zeile also mal unter

efz = Cells(Rows.Count, 1).End(xlUp).Row + 1

und probier's nochmal.

Grüße
EarlFred

mücke
22.02.2008, 15:25
Hallo EarlFred

DANKE für die schnelle Antwort!
Habe den Code wie beschrieben geändert

Private Sub CBut_übernahme_Click()

j = Sheets("Geburtstage").Cells(1, 1)

efz = Cells(Rows.Count, 1).End(xlUp).Row + 1
a = Sheets("Geburtstage").Cells(1, 1) - Year(Cells(efz, 2))
Cells(efz, 1) = txt_Name
Cells(efz, 2) = txt_GebDatum
Cells(efz, 3) = a

End Sub

Jetzt bekomme ich als Wert immer die 109 !
oh je, und nun?

Gruß Mücke

jinx
22.02.2008, 15:38
<font size="2" face="Century Gothic">Moin, mücke,

das Jahr eines leeren Feldes ist immer 1899, und aus 2008 minus 1899 sollten sich wohl 109 Jahre ergeben.

Die Funktion rechnet schon richtig, aber eben nur, wenn auch ein Wert zum Rechnen in der angegeben Zelle Cells(efz, 2) steht... ;)</font>

mücke
22.02.2008, 16:02
Hallo jinx,

danke, jetzt weis ich wenigstens, die Berechnung ist OK.
Aber wie bekomme ich einen Wert in die Cells(efz, 2) ?
Wenn ich die letzte Zeile mit einem Wert auslese, bekomme ich auch einen falschen Wert, da dieser ja noch ne Zelle höher steht.

Hat noch jemand eine Idee ??? !!!

Gruß Mücke

jinx
22.02.2008, 16:09
<font size="2" face="Century Gothic">Moin, mücke,

zum Einen liest Du den letzten Wert in Spalte A aus (2 steht meiner Erinnerung nach für Spalte B), zum Anderen könntest Du Dich statt auf die Zelle evtl. auch auf txt_GebDatum in irgendeiner Form beziehen. Ich weiß aber nicht, was in dem Feld steht - das sagt mir mein Rechner leider nicht.. :holy:</font>

mücke
22.02.2008, 16:32
Hi jinx,

im Feld txt_Name trage ich ein Geburtsdatum ein, welches ich aus einer UserForm in die Tabelle eintrage. Zum besseren Verständnis habe ich mal ein Beispiel angehängt.

Vielen Dank

Gruß Mücke

jinx
22.02.2008, 17:56
<font size="2" face="Century Gothic">Moin, mücke,

ich kann weder unter Excel2002/XP noch unter Excel2007 ein Problem finden - bei mir wird das Alter richtig eingetragen. Änderungen an der Schaltfläche Daten übernehmen (vielleicht sollte in der txt_GebDatum beim Verlassen eine Prüfung auf eine Datumsangabe erfolgen):

Private Sub CBut_übernahme_Click()
With Sheets("Geburtstage")
j = .Cells(1, 1).Value

efz = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(efz, 1) = txt_Name
.Cells(efz, 2) = Format(DateValue(txt_GebDatum), "dd/mm/yyyy")
.Cells(efz, 3) = j - Year(DateValue(txt_GebDatum))
End With
End Sub</font>

IngGi
22.02.2008, 18:05
Hallo mücke,

so sollte es gehen:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> CBut_&uuml;bernahme_Click()
&nbsp;
j = Sheets(&quot;Geburtstage&quot;).Cells(1, 1)
&nbsp;
efz = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(efz, 1) = txt_Name
Cells(efz, 2) = txt_GebDatum
Cells(efz, 3) = j - Year(DateValue(txt_GebDatum))
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)
Gruß Ingolf

mücke
22.02.2008, 18:54
Hi jinx,
hi Ingolf !

Erstmal vielen Dank für EURE Bemühungen :) , aber ich glaube wir reden an einander vorbei. :(
Die Berechnung der Alters wie bei
@ Ingolf: Cells(efz, 3) = j - Year(DateValue(txt_GebDatum))
@ jinx: .Cells(efz, 3) = j - Year(DateValue(txt_GebDatum))
funktionierte von Anfang an.
...
Cells(efz, 3) = j - Year(Cells(efz, 2))
...
Mein Problem war/ist das Alter als Variante zu hinterlegen!
z.B. a (für Alter) = j (Jahr) - g (Geburtsdatum aus Spalte B
Ich möchte im Verlauf des Programms noch mehrmals damit rechnen.

Ich hoffe mein Problem ist jetzt verständlich geworden.

Gruß Mücke

IngGi
22.02.2008, 19:20
Hallo Mücke,

wenn du später auf das Alter zurückgreifen willst, dann steht es doch in der Tabelle. Nur beim Eintragen des neuen Geburtstages ist das eben noch nicht der Fall. Daher musst du beim Eintragen des neuen Geburtstages auf die Textbox des Userformulares zurückgreifen. Später, nachdem das Alter mit der Programmzeile Cells(efz, 3) = j - Year(DateValue(txt_GebDatum)) in die Tabelle geschrieben wurde, kannst du ja auf die entsprechende Zelle zugreifen.

Gruß Ingolf

mücke
22.02.2008, 19:40
Hi Ingolf,

ist ja voll peinlich! :weinen:
Ich hatte mich wohl voll in den Gedanken der Varianten verrand. Sorry!
Nochmals vielen Dank
und
einen schönen Abend

Gruß Mücke