Hallo Ralf,
Zuerst vielen Dank für die Erklärung - ich kann schon Kleinigkeiten in VBA aber vieles ist mir einfach zu steil, Excel selbst ist eher mein Ding.
Und auch vielen Dank für die Formel, dachte zuerst die Haut super hin, erst beim zweiten hinsehen, und genauer Kotnrolle, jeder Spalte.
musste ich bemerken, das irgenwo noch ein Haken sein muss.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'target ist die gerade ausgewählte zelle
If Target.CountLarge > 1 Then Exit Sub
If Target.Column = 1 Or Target.Column = 2 Then 'spalte A oder B
If Target.Row > 1 And Target = "" Then 'ist zelle leer
'ist Zelle oben drüber nicht leer
If Target.Offset(-1) <> "" Then formelnschreiben
End If
End If
End Sub
Sub formelnschreiben()
Dim arSp, itm, rng As Range, i As Long, bolisformula As Boolean
Dim stextformula As String
Dim lrow As Long
'Array mit den zu ersetzenden Spaltennummern
arSp = Split("P,Y,Z,AA,AC,AD", ",")
lrow = ActiveCell.Row
Application.EnableEvents = False
On Error GoTo ERRORHANDLING
For Each itm In arSp
Set rng = Intersect(UsedRange, Columns(itm))
If rng Is Nothing Then Exit Sub
For i = rng.Rows.Count To 1 Step -1
If rng(i, 1).HasFormula Then
stextformula = rng(i, 1).FormulaLocal
stextformula = Replace(stextformula, CStr(rng(i, 1).Row), CStr(lrow), , 3)
'geänderte Formel in zelle schreiben
Cells(lrow, itm).FormulaLocal = stextformula
Exit For
End If
Next
Next
ERRORHANDLING:
Application.EnableEvents = True
End Sub
Ich habe den Code in 2 Tabellen getestet und jedesmal habe ich in den letzten beiden Spalten Fehler in den Formeln ich habe die Formeln in den Spalten genauestens kontrolliert.
zb.Zeile 1270 ist die Excelformel
=WENN(WENN(ISTNV(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));(Y1270-Verrechnungsdaten!$E$2);WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)=0;0;WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)>0;(Y1270-SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));)))<=0;0;WENN(ISTNV(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));(Y1270-Verrechnungsdaten!$E$2);WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)=0;0;WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)>0;(Y1270-SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));))))
nach dem Einfügen stimmen nur die letzten beiden Spalten nicht
Zeile 1271
=WENN(WENN(ISTNV(SVERWEIS(SVERWEIS("*"&LINKS(G1271;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));(Y1271-Verrechnungsdaten!$E$2);WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1271;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)=0;0;WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1271;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)>0;(Y1271-SVERWEIS(SVERWEIS("*"&LINKS(G1271;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));)))<=0;0;WENN(ISTNV(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));(Y1270-Verrechnungsdaten!$E$2);WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)=0;0;WENN(SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH)>0;(Y1270-SVERWEIS(SVERWEIS("*"&LINKS(G1270;10)&"*";Verrechnungsdaten!A:A;1;FALSCH);Verrechnungsdaten!A:C;2;FALSCH));))))
Wie Du hier siehst wird am Anfang noch die Formel richtig eingefügt aber dann nicht mehr, ich hab mal gelesen das VBA nur gewissen Zeichenlängen
übernehmen kann, trifft das hier zu, denn die anderen Formeln zum einfügen sind auch weit kürzer.
Ich hatte mal eine Formel die habe ich in 2 Zeile zerlegt, und beim Einfügen dann wieder zusammengesetzt.
Daher nochmals dein Profiwissen, an was liegt das? Und wie kann man es lösen.
Schönen Abend Dagmar
|