Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1304to1308
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

Makro aus Excel 2003 nach Excel 2010

Makro aus Excel 2003 nach Excel 2010
09.04.2013 09:32:48
Rosi
Hallo Forum,
mit Eurer Hilfe wurde dieses Makro kreiert um nach Eingabe des Geburtsdatums das Lebensalter anzuzeigen:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("A3:A400")) Is Nothing Then 'If ActiveCell = "" Then Exit Sub If Not ActiveCell = "" Then Application.Run ("Aufruf") End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'Geburtsdatum eingeben um Alterangezeigt zu bekommen
'Automatisierung der Altersanzeige in "DieseArbeitsmappe"
If InStr(Target.Address, ":") > 0 Or InStr(Target.Address, ";") > 0 Then Exit Sub
If Target = "" Then Exit Sub
If Target.Count = 1 And Target.Column = 3 Then
If IsDate(Target) Or IsNumeric(Target) Then
Application.EnableEvents = False
If IsDate(Target) Then
If CDate(Left(Target, 6) & Year(Date)) 

Nach dem Umstieg auf Excel 2010 bekomme ich nun bei der Eingabe des Geburtsdatums lediglich die Datumszahl,z.B. 18320 für den 26.02.1950 statt dem Lebensalter 63 angezeigt.
Muss ich dieses Makro irgendwie anpassen/verändern?
Gruß Rosi

34
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro aus Excel 2003 nach Excel 2010
09.04.2013 09:35:22
Hajo_Zi
Hallo rosi,
Zelle als Datum formatieren. Benutze den Makrorecorder.

AW: Makro aus Excel 2003 nach Excel 2010
09.04.2013 10:00:05
Rosi
Hallo Hajo,
nein das geht nicht,damit bekomme ich lediglich das eingegebene Datum (hier:26.02.1950 , statt 63) angezeigt.Im Excel 2003 war mit Zahl und 0 Kommastellen formatiert,das weiß ich noch!
Gruß Rosi

AW: Makro aus Excel 2003 nach Excel 2010
09.04.2013 10:03:38
Hajo_Zi
Hallo Rosi,
Datumswerte um die ging es im ersten Beitrag lasse ich mir nicht mit Komma anzeigen, da benutze ich Datum und Uhrzeit.

Anzeige
AW: Makro aus Excel 2003 nach Excel 2010
09.04.2013 10:13:01
Rosi
Hallo Hajo,
nochmal: ich gebe in Spalte C ein Datum (z.B. 26.02.1950) ein und das Makro bewirkt dass ich nicht das eigegebene Datum angezeigt bekomme sondern das Lebensalter (63) (und da brauch ich keinen Punkt und kein Komma)!
Nur funktioniert das Makro nicht mehr!
Gruß Rosi

nimm doch gleich Formeln ...
09.04.2013 10:12:52
Matthias
Hallo
Tabelle1

 AB
126.02.195063
209.04.195360
310.04.195359

Formeln der Tabelle
ZelleFormel
B1=DATEDIF(A1;HEUTE(); "Y")
B2=DATEDIF(A2;HEUTE(); "Y")
B3=DATEDIF(A3;HEUTE(); "Y")


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Matthias

Anzeige
AW: nimm doch gleich Formeln ...
09.04.2013 10:16:50
Rosi
Hallo Matthias,
ich habe nur eine Spalte zur Verfügung und möchte die Datei auch nicht mit Hilfsspalten aufblähen,sie ist umfangreich genug.Das Makro hat in Excel 2003 seinen Zweck erfüllt und irgendwie muss es auch in Excel 2010 funktionieren.Diesen Weg suche ich!
Gruß Rosi

AW: nimm doch gleich Formeln ...
09.04.2013 10:29:23
Klaus
Hi Rosi,
ich habe keine Ahnung wie dein oben genanntes Makro funktioniert und auch wenig Lust es zu analysieren, nachdem es eine so einfache Formellösung gibt.
Setzt doch die Formel per VBA und tausche sie danach gegen Werte. Im Beispiel:
Sub Test()
Call AlterJahre(Range("A1"))
End Sub
Sub AlterJahre(r As Range)
With r
.FormulaR1C1 = "=DATEDIF(""" & r.Value & """,today(),""Y"")"
.NumberFormat = "0"
.Value = .Value
End With
End Sub
stehe in A1 das gültige Datum "01.08.1981". Nach Aufruf des Makro "Test" wird daraus (über den DateDif-Formelumweg) die Zahl 31, formatiert als Zahl. Den CALL musst du dir halt anpassen. Auf Doppelclick?
Anmerkung: Die Zahl "31" ist für Excel ein gültiges Datum (der 31.01.1900). Beim zweiten Aufruf des Makros kommt daher Blödsinn heraus. Frage an dich: willst du mit der Zahl "31" noch weiter arbeiten, oder kann die auch als Text ("31 Jahre") herauskommen? Im zweiten Fall könnte man verhindern, dass die Umwandlung wiederholt wird (mit ISDATE ....)
Grüße,
Klaus M.vdT.
Expertenfrage: warum kann ich DATEDIF in VBA nicht als application.worksheetfunction.datedif() aufrufen?

Anzeige
AW: nimm doch gleich Formeln ...
09.04.2013 10:47:35
Rosi
Hallo Klaus,
Hintergrund dieser "Makro-Geschichte" ist dass durch ein weiteres Makro in "DieseArbeitsmappe" die angezeigte Zahl (63) beim Öffnen der Mappe aktualisiert wird,d.h. in meinem Beispiel:
wenn die Mappe nach dem 25.02. eines jeden Jahres geöffnet wird erhöht sich das Lebensalter automatisch (also am 26.02.2014 = 64). Dieses Makro habe ich getestet und es funktioniert noch.
Diese Bequemlichkeit möchte ich beibehalten und nicht jedes Jahr 500 Lebensalter und Betriebszugehörigkeiten manuell korrigieren,aber irgendwie macht es das angegebene Makro nicht mehr,ich brauche also nichts neues,lediglich die Funktionalität besagten Makros auf Excel 2010.
Gruß Rosi

Anzeige
Lad mal hoch, ...
09.04.2013 10:51:54
Klaus
... dann bau ich das ein.
Von deiner geposteten Lösung halte ich nichts, viel zu umständlich.
Grüße,
Klaus M.vdT.

AW: nimm doch gleich Formeln ...
09.04.2013 11:00:55
Rosi
Hallo Klaus,
hier das Makro in DieseArbeitsmappe:
Private Sub Workbook_Open()
'Voreinstellung um Anzeige "Alter" (Spalte "C" Blatt "Personal") automatisch zu aktualisieren
Dim loZeile As Long, lstrDatum As String
With Sheets("Personal")
For loZeile = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
If InStr(.Range("C" & loZeile).FormulaLocal, "+N(" & Chr(34)) > 0 Then
lstrDatum = .Range("C" & loZeile).FormulaLocal
lstrDatum = Right(lstrDatum, Len(lstrDatum) - 7)
lstrDatum = Left(lstrDatum, Len(lstrDatum) - 2)
.Range("C" & loZeile).NumberFormat = "dd.mm.yyyy"
.Range("C" & loZeile).Value = CDate(lstrDatum)
End If
Next
End With
End Sub

Gruß Rosi

Anzeige
Dateif in VBA...
09.04.2013 10:53:20
EtoPHG
...kannst du ganz einfach so anwenden,Klaus
DateDiff("YYYY", Target, Date)

...also für Rosi ;-)
Target.Formula = "=" & DateDiff("YYYY", Target, Date) & "+N(""" & Format(Target, "dd.mm.yyyy") & """)"
Gruess Hansueli

Probier mal das..... Gruß
09.04.2013 10:25:06
robert

Private Sub Worksheet_Change(ByVal Target As Range)
'Geburtsdatum eingeben um Alterangezeigt zu bekommen
'Automatisierung der Altersanzeige in "DieseArbeitsmappe"
If InStr(Target.Address, ":") > 0 Or InStr(Target.Address, ";") > 0 Then Exit Sub
If Target = "" Then Exit Sub
If Target.Count = 1 And Target.Column = 3 Then
If IsDate(Target) Or IsNumeric(Target) Then
Application.EnableEvents = False
If IsDate(Target) Then
If CDate(Left(Target, 6) & Year(Date)) 

Anzeige
Nachtrag.....
09.04.2013 10:53:00
robert
Hi,
ich habs ausprobiert, zeigte 2 bis 3 mal korrekt an, aber dann nicht mehr-sonderbar........
Gruß
robert

AW: Nachtrag.....
09.04.2013 10:57:32
Rosi
Hallo Robert,
genau so isses.....hab auch keine Idee mehr,deswegen mein "Ersuchen"!
Gruß Rosi

..wieso in "DieseArbeitsmappe" ? owT
09.04.2013 10:59:57
robert

AW: ..wieso in "DieseArbeitsmappe" ? owT
09.04.2013 11:02:14
Rosi
Hallo Robert,
habs eben Klaus geschickt,schau mal hin,Danke.
Gruß Rosi

Das hat nix mit 2010 am Hut,...
09.04.2013 11:38:14
EtoPHG
Rosi,
Dein Makro funktioniert auch unter 2003 nicht, wenn die Zelle einmal als Zahl formatiert wurde, hast du bei Neueingabe eines Datums auch in der alten XL-Version genau das gleiche Problem!
Ich würde vorschlagen:
Private Sub Worksheet_Change(ByVal Target As Range)
'Geburtsdatum eingeben um Alterangezeigt zu bekommen
'Automatisierung der Altersanzeige in "DieseArbeitsmappe"
If Target.Count = 1 And Target.Column = 3 Then
Application.EnableEvents = False
If IsDate(Target) Or IsNumeric(Target) Then
If Not IsDate(Target) Then Target = CDate(Abs(Target))
Target.Formula = "=" & DateDiff("YYYY", Target, Date) + _
((Month(Target) * 100 + Day(Target)) > _
(Month(Date) * 100 + Day(Date))) * 1 _
& "+N(""" & Format(Target, "dd.mm.yyyy") & """)"
Target.NumberFormat = "0"
End If
Application.EnableEvents = True
End If
End Sub
Gruess Hansueli

Anzeige
AW: Das hat nix mit 2010 am Hut,...
09.04.2013 11:56:16
Rosi
Hallo Hansueli,
tja wenn ich nun in der C-Spalte ein Datum eingebe dann steht es korrekt darin....hätte aber gerne das Alter angezeigt.
Gruß Rosi

AW: Das hat nix mit 2010 am Hut,...
09.04.2013 17:57:58
Tino
Hallo,
hier eine Variante.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, ArrayData, rngTmp As Range, n&
Set rng = Intersect(Range("C2:C" & Rows.Count), Target)
If rng Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each rngTmp In rng.Areas
    ArrayData = rngTmp.Resize(, 2)
    For n = 1 To Ubound(ArrayData)
        If IsDate(ArrayData(n, 1)) Then
            If ArrayData(n, 1) < Date Then
                ArrayData(n, 1) = CInt(Format(CLng(Date) - CLng(ArrayData(n, 1)) + 1, "YY"))
            End If
        End If
    Next n
    Redim Preserve ArrayData(1 To Ubound(ArrayData), 1 To 1)
    rngTmp.NumberFormat = "General"
    rngTmp.Value = ArrayData
Next rngTmp
Application.EnableEvents = True
End Sub
Gruß Tino

Anzeige
AW: Das hat nix mit 2010 am Hut,...
10.04.2013 06:21:27
Rosi
Hallo Tino,
auch damit erscheint in der C-Spalte lediglich die Excel-Datumszahl....
Gruß Rosi

..dann hast Du ein anderes Problem..
10.04.2013 07:23:58
robert
Hi Rosi,
bei mir funktioniert die Lösung von Tino.
Was er nicht hat, ist die +N Anzeige :-)
Hast Du den Code in dem Blatt, in dem Du die Daten eingibst?
Gruß
robert

AW: ..dann hast Du ein anderes Problem..
10.04.2013 08:05:18
Rosi
Hallo Robert,
der Code befindet sich in dem Blatt,in dem die Daten eingegeben werden,habe keine Idee mehr...
Gruß Rosi

..meine Datei schon ausprobiert? owT
10.04.2013 08:08:44
robert

AW: ..meine Datei schon ausprobiert? owT
10.04.2013 08:18:31
Rosi
Hallo Robert,
ja hab ich probiert...aber bei mir geht das nicht,versteh ich nicht.
Gruß Rosi

noch ein Versuch....
10.04.2013 08:21:31
robert
Hi Rosi,
schau mal ob in
DATEI-OPTIONEN-FORMELN
Berechnung-Automatisch eingestellt ist.
Gruß
robert

Anzeige
..das war es nicht, aber...
10.04.2013 08:26:14
robert
Hi Rosi,
trag mal ein paar Daten ein und lade die Datei hier hoch.
Gruß
robert

AW: ..das war es nicht, aber...
10.04.2013 08:51:27
Rosi
Hallo Robert,
habe eine neue Datei zum ausprobieren erstellt,auch da funktioniert das Makro nicht!
Eigentlich müsste Spalte C nach Eingabe des Codes reagieren,aber bekomme bei der Standardformatierung nur das eingegebene Datum angezeigt und bei Formatierung mit Zahl den Datumswert...wie wenn der Code gar nicht vorhanden wär!
Die betreffende Datei selbst ist sehr komplex und umfangreich und ist Firmeneigentum,darf ich nicht verschicken.
Gruß Rosi

ich meinte die Probedatei-schicken... owT
10.04.2013 08:56:13
robert

AW: ich meinte die Probedatei-schicken... owT
10.04.2013 09:36:24
Rosi
Hallo Robert,
wie gewünscht....

Die Datei https://www.herber.de/bbs/user/84808.xlsm wurde aus Datenschutzgründen gelöscht


Hier das Ergebnis bei mir......
10.04.2013 09:44:25
robert
https://www.herber.de/bbs/user/84809.xlsm
Tja Rosi,
dann ist das Problem irgendwo im Excel-VBA- Dschungel ;-)
Sorry, keine Ahnung, warum es nicht bei dir geht.
Ich gebe auf....
:-) Gruß
robert

AW: Hier das Ergebnis bei mir......
10.04.2013 13:33:03
Rosi
Danke Euch allen für eure Mühe,vielleicht hat ja noch jemand eine Idee?
Gruß Rosi

AW: Hier das Ergebnis bei mir......
10.04.2013 15:00:54
Tino
Hallo,
Dein VBA Code bring bei mir aber keine Funktion die sich automatisch aktualisiert.
Hier mal eine andere Variante.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, ArrayData, rngTmp As Range, n&
Set rng = Intersect(Range("C2:C" & Rows.Count), Target)
If rng Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each rngTmp In rng.Areas
    ArrayData = rngTmp.Resize(, 2).FormulaR1C1
    For n = 1 To Ubound(ArrayData)
        If IsNumeric(ArrayData(n, 1)) Then
            If ArrayData(n, 1) < CLng(Date) And ArrayData(n, 1) > 0 Then
                ArrayData(n, 1) = "=Year(Today()+1-Date(" & Format(CDate(ArrayData(n, 1)), "yyyy,m,d") & "))-Year(0)"
            End If
        End If
    Next n
    Redim Preserve ArrayData(1 To Ubound(ArrayData), 1 To 1)
    rngTmp.NumberFormat = "General"
    rngTmp.FormulaR1C1 = ArrayData
Next rngTmp
Application.EnableEvents = True
End Sub
Gruß Tino

AW: Hier das Ergebnis bei mir......
11.04.2013 05:47:23
Rosi
Hallo Tino,
Volltreffer!! Es funktioniert.
Dennoch ist es mir schleierhaft wieso mein Code in einer früheren Version funktionierte und hier nicht.Auch Dein Vorgänger-Code (der bei Dir funktionierte) klappte hier nicht.Alles ein bißchen dubios,hätte es gern verstanden.
Aber wichtig ist nunmal der Effekt.
Vielen,vielen herzlichen Dank,auch nochmal an die "Mitstreiter".
Gruß Rosi

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige