Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Schleife oder Makro?

VBA Schleife oder Makro?
11.05.2014 18:15:38
Alex105
Hallo Zusammen,
ich versuche das gewünschte Makro mal so präzise wie möglich zu beschreiben:
Ich ziehe mir eine Tabelle (die ist bereits nach Jahreszahlen aufsteigend sortiert) aus einem Warenwirtschaftssystem und füge sie in Excel (2010) ein. Jetzt möchte ich nach jedem letzten Wert eines Jahres eine Leerzeile eingefügt haben und genau da beginnt das Problem.... Die Datensätze können mal länger und mal kürzer sein also brauche ich ein Makro, welches erkennt, wann der letzte Wert eines Jahres erreicht wurde. Geht das überhaupt mit Makro?
Vielen Dank vorab und Viele Grüße
Alex

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schleife oder Makro?
11.05.2014 18:57:10
Tino
Hallo,
kannst mal so testen.
Tabelle1 ist die Tabelle und Columns(1) ist die Spalte wo die Datumswerte stehen, evtl. anpassen.
Sub Test()
Dim nRow, lngDateMin&, lngDateMax&, n&
With Tabelle1.UsedRange.EntireRow
lngDateMin = Application.WorksheetFunction.Min(.Columns(1))
lngDateMax = Application.WorksheetFunction.Max(.Columns(1))
For n = Year(lngDateMax) To Year(lngDateMin) Step -1
lngDateMax = DateSerial(n + 1, 1, 1)
nRow = Application.Match(lngDateMax, .Columns(1), 1)
If IsNumeric(nRow) Then
If .Cells(nRow + 1, 1)  "" Then
.Rows(nRow + 1).Insert Shift:=xlDown
End If
End If
Next n
End With
End Sub
Gruß Tino

Anzeige
AW: VBA Schleife oder Makro?
11.05.2014 19:58:16
Alex105
Hallo Tino,
funktioniert super! Vielen, vielen Dank!
Eine ergänzende Frage noch.
Wenn ich vorher ein Makro laufen lasse, was formatierung etc. anpasst, wie bekomme ich deins im Nachgang eingefügt ohne, dass dann ein Fehler kommt?!
Wenn ich das schaffe, müsste es perfekt sein :)
1000 Dank nochmal!
Alex

AW: VBA Schleife oder Makro?
11.05.2014 20:20:01
Tino
Hallo,
am ende von Deinem Makro einfach mit
Call Test

dieses Makro aufrufen.
Gruß Tino

AW: VBA Schleife oder Makro?
12.05.2014 08:36:51
Alex105
Hi Tino,
also, wenn ich nur dein Makro nutze, funktioniert es, wenn ich es nur in "dieser Arbeitsmappe" laufen lasse. Sobald ich es in der "PERSONAL.XLSB" abspeichern und nutzen möchte, geht nichts mehr. Die Sache mit dem "Call" ist noch nicht ganz 100%ig aber da arbeite ich mich durch....
Hast du eine Idee, wie ich das nutzen kann bzw. dass es in der Personal auch läuft?
Vielen Dank und viele Grüße
Alex

Anzeige
AW: VBA Schleife oder Makro?
12.05.2014 08:36:59
Alex105
Hi Tino,
also, wenn ich nur dein Makro nutze, funktioniert es, wenn ich es nur in "dieser Arbeitsmappe" laufen lasse. Sobald ich es in der "PERSONAL.XLSB" abspeichern und nutzen möchte, geht nichts mehr. Die Sache mit dem "Call" ist noch nicht ganz 100%ig aber da arbeite ich mich durch....
Hast du eine Idee, wie ich das nutzen kann bzw. dass es in der Personal auch läuft?
Vielen Dank und viele Grüße
Alex

AW: VBA Schleife oder Makro?
12.05.2014 08:40:15
Alex105
Hi Tino,
also, wenn ich nur dein Makro nutze, funktioniert es, wenn ich es nur in "dieser Arbeitsmappe" laufen lasse. Sobald ich es in der "PERSONAL.XLSB" abspeichern und nutzen möchte, geht nichts mehr. Die Sache mit dem "Call" ist noch nicht ganz 100%ig aber da arbeite ich mich durch....
Hast du eine Idee, wie ich das nutzen kann bzw. dass es in der Personal auch läuft?
Vielen Dank und viele Grüße
Alex

Anzeige
AW: VBA Schleife oder Makro?
12.05.2014 09:48:36
Alex105
Hi Tino,
ich nehm alles zurück. Ich habe den Namen oben angepasst auf ActiveSheet und es läuft jetzt auch mit dem Call!
Vielen, vielen Dank!!!!
Viele Grüße
Alex

AW: VBA Schleife oder Makro?
12.05.2014 18:32:46
Tino
Hallo,
du hast es schon richtig erkannt, wenn man aus einer anderen Datei was ja die xlsb ist
muss man mit ActiveWorkbook arbeiten.
in etwa so
Sub Test()
Dim nRow, lngDateMin&, lngDateMax&, n&
With ActiveWorkbook.Sheets("Tabelle1").UsedRange.EntireRow
lngDateMin = Application.WorksheetFunction.Min(.Columns(1))
lngDateMax = Application.WorksheetFunction.Max(.Columns(1))
For n = Year(lngDateMax) To Year(lngDateMin) Step -1
lngDateMax = DateSerial(n + 1, 1, 1)
nRow = Application.Match(lngDateMax, .Columns(1), 1)
If IsNumeric(nRow) Then
If .Cells(nRow + 1, 1)  "" Then
.Rows(nRow + 1).Insert Shift:=xlDown
End If
End If
Next n
End With
End Sub
Gruß Tino
Anzeige

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige