• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Excel - Dynamisches Makro erstellen

R4V3BROT

Englischer Kantapfel
Registriert
22.02.06
Beiträge
1.092
Hallo!

Ich kann leider noch kein VBA, vielleicht lerne ich das noch. Bis dahin erstelle ich aber alle meine Makros mit dem Makrorekorder.

Ich glaube aber, dass ich an dem seine Grenzen gestoßen bin:

Ich möchte ein Makro erstellen, das immer in die nächstleere Zeile Text und Formeln einfügt und ein neues Datenblatt erstellt.

Das Problem ist, der Makrorekorder merkt sich in welcher Zeile das Makro erstellt wurde und rutscht nicht (wie er sollte) jedesmal in die nächstleere Zeile...


Hier mein bisheriger Code (ich vremute die Lösung liegt in der Range):

ub neuesprojekt()
'
' neuesprojekt Makro
' Makro am 20.08.2009 von A13123 aufgezeichnet
'
' Tastenkombination: Strg+g
'
Sheets("Vorlage").Select
Sheets("Vorlage").Copy Before:=Sheets(84)
Sheets("Vorlage (2)").Select
Sheets("Vorlage (2)").Name = "neues Projekt"
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Projekte & Kontingente").Select
Range("C87").Select
ActiveCell.FormulaR1C1 = "neues Projekt"
With ActiveCell.Characters(Start:=1, Length:=13).Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("A86").Select
Selection.AutoFill Destination:=Range("A86:A87"), Type:=xlFillDefault
Range("A86:A87").Select
Range("CE86:CH86").Select
Selection.AutoFill Destination:=Range("CE86:CH87"), Type:=xlFillDefault
Range("CE86:CH87").Select
Range("CJ86:CL86").Select
Selection.AutoFill Destination:=Range("CJ86:CL87"), Type:=xlFillDefault
Range("CJ86:CL87").Select
Range("CN86").Select
ActiveWindow.SmallScroll ToRight:=8
Range("CN86:CR86").Select
Selection.AutoFill Destination:=Range("CN86:CR87"), Type:=xlFillDefault
Range("CN86:CR87").Select
Range("CT86").Select
ActiveWindow.SmallScroll ToRight:=5
Range("CT86:ET86").Select
Selection.AutoFill Destination:=Range("CT86:ET87"), Type:=xlFillDefault
Range("CT86:ET87").Select
ActiveWindow.SmallScroll ToRight:=-48
Range("CJ86:CL86").Select
Range("CL86").Activate
Selection.AutoFill Destination:=Range("CJ86:CL87"), Type:=xlFillDefault
Range("CJ86:CL87").Select
ActiveWindow.SmallScroll ToRight:=-8
Range("BJ86:CH86").Select
Range("CH86").Activate
ActiveWindow.SmallScroll ToRight:=17
Selection.AutoFill Destination:=Range("BJ86:CH87"), Type:=xlFillDefault
Range("BJ86:CH87").Select
ActiveWindow.SmallScroll ToRight:=-22
Range("D86:BH86").Select
Range("BH86").Activate
ActiveWindow.ScrollColumn = 49
ActiveWindow.ScrollColumn = 71
ActiveWindow.ScrollColumn = 66
ActiveWindow.ScrollColumn = 60
ActiveWindow.ScrollColumn = 56
Selection.AutoFill Destination:=Range("D86:BH87"), Type:=xlFillDefault
Range("D86:BH87").Select
Range("C87").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"'neues Projekt'!A1", TextToDisplay:="neues Projekt"
End Sub
 

DirkR

Braeburn
Registriert
26.04.08
Beiträge
44
Hi,

da du kein VBA kannst, versuche ich es mal mit einer Lösung die wenig VBA Änderungen benötigt:

Gehe in Excel auf EINFÜGEN;NAME;DEFINIEREN

Dort gibts du oben einen Namen ein z.B.: ErsteFreieZelle
Unten bei "Bezieht sich auf" folgende Formel:

=BEREICH.VERSCHIEBEN(Tabelle1!$A$1;ANZAHL2(Tabelle1!$A:$A);0)

hier musst du natürlich noch den Tabellennamen und die Spalte anpassen.

Tabelle1!$A$1 ist die erste Zelle in dr Spalte und mit ANZAHL2(Tabelle1!$A:$A) wird gesprüft
wieviele Werte bereits in der Spalte stehen. Die Formel sucht dann immer automatisch die erste freie Zelle.

In dem Makro musst du dann nur noch den Bereich anpassen:

"Range("C87").Select" wird zu "Range("ErsteFreieZelle").Select"

Gruss
Dirk