Hallo
bin ja selbst noch Makro-Anfänger, aber dennoch möcht ich dir antworten. Zumal mir da noch ein paar Dinge aufgefallen sind.
kommt der Fehler "Kein Zugriff auf Objekt. Falsche Verwendung des Objektes"
[...]
RabattFormel = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10+i) Hier war der Fehler bei der Variablen LetzteSpalte
Und wie lautete der Fehler denn jetzt genau?
Und wie kommst Du darauf das es die Variable betrifft?
Zur sicherheit würde ich dir aber empfehlen, Variablen am Makroanfang zu deklarieren. Hatte nämlich selber vor kurzem das Problem, dass eine Datei hier bei mir unter OOo 3.2.1 fehlerfrei lief, jedoch aber unter OOo 3.3.0 nicht. Der Grund war schnell gefunden. Variablen a, b und c waren nicht deklariert. Und nachdem ich sie deklariert hatte, gabs keine Probleme mehr.
Der Makroanfang sah dann wie folgt aus.
Code: Alles auswählen
Sub ...
Dim a as object
Dim b as object
Dim c as object
Und in diesem deinem Falle würde ich vorschlagen.
Meine Erfahrung diesbezüglich war: OOo 3.3.0 nimmt es sehr genau mit der Variablendeklaration. Und wenn da eine fehlt, kann es schon mal zu Problemen kommen. Auch wenn Du unter der eben genannten Version programmiert hast, so solltest Du auf die Variablendeklaration achten.
Wie oft willst Du denn das noch schreiben?
Ich sage es mal so.
Mehr als 2 mal, dann komprimieren. Und zwar gehst Du am besten so vor.
Code: Alles auswählen
Sub blablabla
Dim oBlattAngebot as Object
oBlattAngebot = oDoc.sheets.getByName("Angebot")
Dann sehen deine Codezeilen beispielsweise nicht mehr so aus
Code: Alles auswählen
RabattUeberschrift = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+nUpperBoundary,9)
RabattFormel = oDoc.sheets.getByName("Angebot").getCellByPosition(LetzteSpalte+1,10+i)
sondern so.
Code: Alles auswählen
RabattUeberschrift = oBlattAngebot.getCellByPosition(LetzteSpalte+nUpperBoundary,9)
RabattFormel = oBlattAngebot.getCellByPosition(LetzteSpalte+1,10+i)
Ich find das sieht etwas übersichtlicher aus.
Code: Alles auswählen
RabattFormel.FormulaLocal = "=" & cellname2 & i+11 & "*" & cellname & ""
RabattFormel.NumberFormat = 107
Wäre es nicht vielleicht sinnvoler erst das Zellformat (NumberFormat) zu setzen, und dann die Formel eintragen? Ist nur mal so eine Überlegung. Und außerdem bin ich wirklich am Grübeln ob es auf die Reihenfolge drauf ankommt.
Code: Alles auswählen
LetzteSpalte = LetzteSpalte+2
mycolumns = oSheet.getcolumns
mycolumns.insertbyindex(LetzteSpalte,1)
Ist das wirklich so gut?
Was hälst Du denn von folgendem?
Code: Alles auswählen
mycolumns = oSheet.getcolumns
mycolumns.insertbyindex(LetzteSpalte+2,1)
Code: Alles auswählen
mycell = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname = oColumn
FuerTKP = cellname
mycell = oSheet.getCellByPosition(LetzteSpalte+1,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname2 = oColumn
mycell = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn = mycell.getColumns.getByIndex(0).getName()
cellname3 = oColumn
Diese Zeilen hast Du ja auch mehr als einmal. Auch das würd ich vereinfachen und übersichtlicher machen.
Das an den Makroanfang.
Code: Alles auswählen
Dim mycell1 as Object
Dim mycell2 as Object
Dim mycell3 as Object
Dim oColumn1 as Object
Dim oColumn2 as Object
Dim oColumn3 as Object
mycell1 = oSheet.getCellByPosition(LetzteSpalte,11)
mycell2 = oSheet.getCellByPosition(LetzteSpalte+1,11)
mycell3 = oSheet.getCellByPosition(LetzteSpalte,11)
oColumn1 = mycell1.getColumns.getByIndex(0).getName()
oColumn2 = mycell2.getColumns.getByIndex(0).getName()
oColumn3 = mycell3.getColumns.getByIndex(0).getName()
Und dann dort wo Du es brauchst nur noch das.
Code: Alles auswählen
cellname = oColumn1
FuerTKP = cellname
cellname2 = oColumn2
cellname3 = oColumn3
Das sind nur einfache Vorschläge meinerseits, die sich vielleicht auch noch verbessern ließen.
Hier hast du mal einen Auszug des Codes (Der ganze ist noch mal 5 mal so lang.)
Hast Du das auf mehrere Module aufgeteilt? Soll nämlich besser sein, und außerdem erhöht es die Übersichtlichkeit.
Ach ja, noch eins.
Es reicht ganz einfach: SummenFormeln
Das Call brauchst Du nicht, ist überflüssig.
Gruß
balu