Forums Neueste Beiträge
 
Tags Keywords

Teil (MID)

26/02/2009 - 16:43 von Förster | Report spam
Hallo liebe Experten,

als Anfànger versuche ich, mit dem Makro-Recorder zu lernen und passe das
mit Hilfe von Beispielen in der "Hilfe" , aus Büchern oder Communities an.
Das folgende Makro macht nichts außer TT, MM und JJJ in die erste Zeile zu
schreiben. Es kommt auch keine Fehlermeldung (womit ich ansonsten sehr
gesegnet bin).

Sub DatumAuseinander1()
'
' DatumAuseinander1 Makro
'

Dim intz As Integer 'Zeile

With Sheets(1)

intz = 2
ActiveCell.FormulaR1C1 = "TT"
ActiveCell.Offset(0, 1) = "MM"
ActiveCell.Offset(0, 2) = "JJJJ"
Do Until IsEmpty(.Cells(intz, 1).Value)
.Cells(intz, 26).Value = "=MID(RC[-6], 1,3)"
.Cells(intz, 27).Value = "=MID(RC[-7], 5,2)"
.Cells(intz, 28).Value = "=MID([RC[-8], 8,4)"
intz = intz + 1
Loop
End With
End Sub

Die Tabelle= A1:Y1968 mit Überschriften
Das "auseinanderzunehmende" Datum steht in Spalte T.

Das auseinandergenommene Datum brauche ich (als Hilfsspalten) zum Sortieren,
weil die "normale" Sortierfunktion mir das Datum nach Tag/Monat/Jahr (d.h.
1.1.; 1.2.; 1.3. etc) sortiert. Umformatieren hat nicht funktioniert.

Was ist in dem obigen Makro nicht stimmig? Habe ich eventuell falsche Bezüge
aufgebaut? Bei Beginn des Makros ist die aktivierte Zelle = Z1!

Danke im voraus für jede Hilfe

Grüße
Renate
 

Lesen sie die antworten

#1 Eberhard Funke
27/02/2009 - 11:37 | Warnen spam
Am Thu, 26 Feb 2009 07:43:03 -0800 schrieb Förster:

Hallo Renate

Sub DatumAuseinander1()

Dim intz As Integer 'Zeile

With Sheets(1)

intz = 2
ActiveCell.FormulaR1C1 = "TT"
ActiveCell.Offset(0, 1) = "MM"
ActiveCell.Offset(0, 2) = "JJJJ"
Do Until IsEmpty(.Cells(intz, 1).Value)
.Cells(intz, 26).Value = "=MID(RC[-6], 1,3)"
.Cells(intz, 27).Value = "=MID(RC[-7], 5,2)"
'.Cells(intz, 28).Value = "=MID([RC[-8], 8,4)"



' "[" zuviel und Start für Jahreszahl falsch:
.Cells(intz, 28).Value = "=MID(RC[-8], 7,4)"

intz = intz + 1
Loop
End With
End Sub

Die Tabelle= A1:Y1968 mit Überschriften



Vorstehendes habe ich ausser Acht gelassen, denn Spalte T befindet sich
innerhalb von A1:Y1968, und dort sollen ja *Überschriften* (also kein
Datum) stehen.

Das "auseinanderzunehmende" Datum steht in Spalte T.



Nach Deinem Code zu urteilen steht das Datum in Spalte T als *Text*.
(Darauf beziehen sich obige Änderungen)

Wenn es sich um jedoch um normales ExcelDatum handelt, dann sind das
Zahlen, die Du so nicht trennen kannst. (Test: gib ein Datum normal in eine
Zelle ein und wàhle dann --> Format --> Standard.)

In diesem Fall müsstest Du die entsprechenden Zeilen ersetzen durch

.Cells(intz, 26).Formula = "=Day(RC[-6])"
.Cells(intz, 27).Formula = "=Month(rc[-7])"
.Cells(intz, 28).Formula = "=Year(rc[-8])"

Dann stehen die Tage usw. als Formeln in der Tabelle (und passen sich damit
Änderungen in Spalte T an).

Alternativ könntest Du auch für die Tage usw. feste Werte eintragen:

Sub DatumAuseinander1()
Dim intz As Integer 'Zeile
With Sheets(1)
intz = 2
.Range("AA1").Value = "TT"
.Range("Z1").Value = "MM"
.Range("AB1").Value = "JJJJ"
Do Until IsEmpty(.Cells(intz, 1).Value)
.Cells(intz, 26).Value = Day(.Cells(intz, 20))
.Cells(intz, 27).Value = Month(.Cells(intz, 20))
.Cells(intz, 28).Value = Year(.Cells(intz, 20))
intz = intz + 1
Loop
End With
End Sub

Dabei habe ich gleichzeitig einige weitere Änderungsvorschlàge eingebaut.

Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de

Ähnliche fragen