Makro für Edit - Return

Hallo,

ich habe ein Excel Add-On (ALEA), das folgendes Problem verursacht: eine Formel muss mit F2 und dann Return bestätigt werden, ansonsten wird sie nicht als Formel erkannt. Sämtliche Formatierungsversuche (auch unserer DV-Experten) sind gescheitert, scheint wohl ein Bug zu sein. Da die Datei 1000 Zeilen hat, wird das ganze auf Dauer zu einer nervigen Fingerübung. Jetzt dachte ich an ein Makro, das beim Startfeld anfängt, F2 und Return macht, eine Zeile nach unten geht usw. bis 1000 Zeilen erreicht sind oder vorher abgebrochen wurde. Da ich in der VBA-Progammierung nicht fit bin und es mit reinem Aufzeichnen nicht funktioniert, bräuchte ich eure Hilfe. Kann mir jemand weiterhelfen, indem er mir das Vorgehen erklärt oder vielleicht sogar ein fertiges Makro schickt (dürfte ja nicht allzu lang sein)?

Vielen Dank im Voraus

Oliver

Sub Makro()
 For i = 0 To i = 1000
 inhalt = ActiveCell.Value
 ActiveCell.Value = inhalt
 ActiveCell.Offset(1, 0).Select
 Next i
End Sub

sollte ausreichen…

Hallo,

Danke für Dein Makro. Es ist aber leider nicht das, was ich brauche. Er soll nicht aus der Formel einen Text/Wert machen, sondern ich muss nur mir F2 in den Editier-Modus gehen und dann die Formel mit Return bestätigen. Die Formel als solche bleibt damit bestehen, aber erst durch dieses Vorgehen wird ein Wert aus ALEA angezeigt.

Oliver

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

dann versuchs mit
.FormulaR1C1
statt
.Value

Ändert leider nichts…

Kann man denn dieses F2 - Return nicht makromäßig verarbeiten?

dann versuchs mit
.FormulaR1C1
statt
.Value

Hallo Oliver,

es gibt eine etwas elegantere Methode um den Text in den Zellen in eine Formel su verwandeln.

Sub FormelEintragen()
 ' Schreibt Text in Zellen als Formel zurück
 Dim rngZelle As Range, rngStart As Range, wks As Worksheet
 Set wks = ActiveSheet
 With wks
 Set rngStart = .Range("B2")
 Set rngZelle = .Range(rngStart, .Cells(.Rows.Count, rngStart.Column).End(xlUp))
 rngZelle.Formula = rngZelle.Value
 End With
End Sub

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Franz,

funktioniert leider auch nicht. Das zerstört nur die Formel…

Oliver

Hallo Oliver,

es gibt eine etwas elegantere Methode um den Text in den
Zellen in eine Formel su verwandeln.

Sub FormelEintragen()
’ Schreibt Text in Zellen als Formel zurück
Dim rngZelle As Range, rngStart As Range, wks As Worksheet
Set wks = ActiveSheet
With wks
Set rngStart = .Range(„B2“)
Set rngZelle = .Range(rngStart, .Cells(.Rows.Count,
rngStart.Column).End(xlUp))
rngZelle.Formula = rngZelle.Value
End With
End Sub

Gruß
Franz

Hallo Franz,

funktioniert leider auch nicht. Das zerstört nur die Formel…

Oliver

Hallo Oliver,

was funktioniert denn nicht. Ich hab in einer normalen Exceltabelle zum Beispiel folgende Formeln als Text in den Zellen stehen, wobei die Zellen vor dem Start des Makros als Standard formatiert sind. Bei Zahlenberechnungen kann es auch ein Zahlenformat sein.

Tabellenblattname: TabHoch

 B 
2 =A1+H1\*(I1^4)/320+TabQuer!A1\*TabQuer!B1/230 
3 =A1+H1\*(I1^4)/320+TabQuer!A1\*TabQuer!B1/231 
4 =A1+H1\*(I1^4)/320+TabQuer!A1\*TabQuer!B1/232 
5 =A1+H1\*(I1^4)/320+TabQuer!A1\*TabQuer!B1/233 

nach Durchlauf des Makros stehen die Formeln korrekt in den Zellen und die Ergebnisse werden angezeigt.

Hier dann auch noch die Variante mit Tastaturbefehlen, wobei bei mir die Optionen so eingestellt sind, dass mit Enter-Taste die Zelle unterhalb der Eingabe-Zelle aktiv wird. Bei anders eingestellten Optionen müssen ggf. noch entsprechende Pfeiltasten-Befehle eingefügt werden!

Sub FormelnEintragen2()
 ' Schreibt Text in Zellen als Formel zurück
 Dim rngZelle As Range, rngStart As Range, wks As Worksheet
 Set wks = ActiveSheet
 With wks
 Set rngStart = .Range("B2")
 rngStart.Select
 For I = rngStart.Row To .Cells(.Rows.Count, rngStart.Column).End(xlUp).Row
 Application.SendKeys ("{F2}")
 Application.SendKeys ("{EINGABE}")
 Next I
 End With
End Sub

Diese Makro funktioniert nur korrekt wenn die zu bearbeitende Tabelle aktiv ist. Es funktioniert nicht, wenn es im Schrittmodus ausgeführt wird oder vom VBA-Editor aus gestartet wird.

Gruß
Franz

1 „Gefällt mir“

Hallo Franz,

super, mit

Application.SendKeys ("{F2}")
Application.SendKeys ("{EINGABE}")

gehts! Mir ist zwar noch nicht ganz klar, was das Makro noch macht (rngStart.Select?), aber das macht ja nicht unbedingt was. Verstehe ich das richtig, dass es bis zum Ende der Tabelle automatisch läuft? Wenn ich jetzt möchte, dass es nicht in B2 beginnt, sondern dort wo der Cursor steht, wie muss es dann angepasst werden?

Schon mal vielen Dank, Du ersparst mir damit viel arbeit!

Oliver

Sub FormelnEintragen2()
’ Schreibt Text in Zellen als Formel zurück
Dim rngZelle As Range, rngStart As Range, wks As Worksheet
Set wks = ActiveSheet
With wks
Set rngStart = .Range(„B2“)
rngStart.Select
For I = rngStart.Row To .Cells(.Rows.Count,
rngStart.Column).End(xlUp).Row
Application.SendKeys ("{F2}")
Application.SendKeys ("{EINGABE}")
Next I
End With
End Sub

Diese Makro funktioniert nur korrekt wenn die zu bearbeitende
Tabelle aktiv ist. Es funktioniert nicht, wenn es im
Schrittmodus ausgeführt wird oder vom VBA-Editor aus gestartet
wird.

Gruß
Franz

Hallo Franz,

super, mit

Application.SendKeys ("{F2}")
Application.SendKeys ("{EINGABE}")

gehts! Mir ist zwar noch nicht ganz klar, was das Makro noch
macht (rngStart.Select?), aber das macht ja nicht unbedingt
was. Verstehe ich das richtig, dass es bis zum Ende der
Tabelle automatisch läuft? Wenn ich jetzt möchte, dass es
nicht in B2 beginnt, sondern dort wo der Cursor steht, wie
muss es dann angepasst werden?

Schon mal vielen Dank, Du ersparst mir damit viel arbeit!

Oliver

Hallo Oliver,

mit der Zeile

 Set rngStart = .Range("B2")

wird die Zelle gesetzt in der das Makro beginnen soll die Tastenkombination zu senden.
Soll die gerade aktive Zelle in der Tabelle die Startzelle sein, dann so anpassen:

 Set rngStart = ActiveCell

Das Makro ermittelt für die Spalte in der sich die Startzelle befindet die letzte ausgefüllte Zeile und sendet dann entsprechend oft die Tastenkombination.

Gruß
Franz

1 „Gefällt mir“

Hallo Franz,

Danke, so sollte das Makro laufen!

Auf ActiveCell hätte selbst ich als Makro-Laie draufkommen können…

Oliver

Hallo Oliver,

mit der Zeile

Set rngStart = .Range(„B2“)

wird die Zelle gesetzt in der das Makro beginnen soll die
Tastenkombination zu senden.
Soll die gerade aktive Zelle in der Tabelle die Startzelle
sein, dann so anpassen:

Set rngStart = ActiveCell

Das Makro ermittelt für die Spalte in der sich die Startzelle
befindet die letzte ausgefüllte Zeile und sendet dann
entsprechend oft die Tastenkombination.

Gruß
Franz