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