Hier das Beispiel
code:
FormulaTxt = "=SUM(R[" & Zeilenversatz & "]C" & M_Sp_Sta & ":R[" & Zeilenversatz & "]C" & M_Sp_End & "*((((COLUMN(R" & P_JhZ & "C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))>=0)*((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))RC7)*(((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))=(R[" & Zeilenversatz & "]C7-1))*(R[" & Zeilenversatz & "]C8-R[" & Zeilenversatz & "]C7)))/R[" & Zeilenversatz & "]C8"
FormulaTxt = FormulaTxt & ",(((COLUMN(RC)-COLUMN(RC" & PStrtColOfs + P_JhrToMon_Cols & "))<=RC12)+(((COLUMN(RC)-COLUMN(RC" & PStrtColOfs + P_JhrToMon_Cols & "))=RC12)*(RC13-RC12)))*RC11"
FormulaTxt = FormulaTxt & ")"
FormulaTxt = "=SUM(R[" & Zeilenversatz & "]C" & M_Sp_Sta & ":R[" & Zeilenversatz & "]C" & M_Sp_End & "*((((COLUMN(R" & P_JhZ & "C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))>=0)*((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))RC7)*(((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))=(R[" & Zeilenversatz & "]C7-1))*(R[" & Zeilenversatz & "]C8-R[" & Zeilenversatz & "]C7)))/R[" & Zeilenversatz & "]C8"
FormulaTxt = FormulaTxt & ",(((COLUMN(RC)-COLUMN(RC" & PStrtColOfs + P_JhrToMon_Cols & "))<=MIN(RC12,RC13))+((RC12 FormulaTxt = FormulaTxt & ")"
Debug.Print "Prs_AFAFormeln_einfügen: Formellänge= " & Len(FormulaTxt)
Debug.Print FormulaTxt
Application.ScreenUpdating = True
Cells(StrtZei, M_Sp_Sta).Select
Selection.FormulaR1C1 = FormulaTxt
Cells(StrtZei, M_Sp_Sta).Application.ActiveWindow.Activate
DoEvents
Cells(StrtZei, M_Sp_Sta).Select
ActiveSheet.Application.SendKeys "{F2}+^{Enter}", True
DoEvents
das ergibt die Array-Formel
=SUM($X51:$DC51*((((COLUMN(X$11)-COLUMN($X$11:$DC$11))>=0)*((COLUMN(X$2)-COLUMN($X$11:$DC$11))$G58)*(((COLUMN(X$2)-COLUMN($X$11:$DC$11))=($G51-1))*($H51-$G51)))/$H51,(((COLUMN(X58)-COLUMN($W58))<=MIN($L58,$M58))+(($L58<$M58)*((COLUMN(X58)-COLUMN($W58))=$L58)*($M58-$L58)))*$K58)
Da diese Formel für die Zuweisung
Formulaarray = ..."
zu lange ist, wird sie über die Sendkeys - Anweisung von einer Formel in eine Array-Formel umgewandelt.
Hierbei werden an drei Stellen "@" - Zeichen hinzugefügt, was zu falschen Ergebnissen führt.
wenn ich dann die "@" per Hand rauslösche passen die Ergebnisse wieder.
Kann ich das Einfügen der "@" Zeichen verhindern?
Die Makros müssen auch auf dem alten EXCEL 2016 weiterlaufen, da die User über einen längeren Zeitraum umgestellt werden.
Die zwei Links habe ich mir angeschaut, dort wird noch nicht mal auf Range.FormulaArray eingegangen, hab dann gefunden, dass Formula2 der neue Name für FormulaArray ist.
das würde bedeuten, dass ich in jedem Fall zwei verschiedene Code-Teile brauche, je nachdem um welche Version es geht.
Erlaubt denn dann Formula2 längere Strings als FormulaArray in Excel2016?
viele Grüße,
Günther