Hallo zusammen,
ich habe den Code nun noch etwas optimiert. Ich habe festgestellt, dass es auch ohne Global funktioniert.
Ich habe aber noch zwei Fragen:
a) Mit den Zeilen
werden die Daten aus dem Array gelöst.
Wenn ich direkt
schreibe und dann mit Ergebnis weiterrechnen möchte, bekomme ich einen Fehlerhinweis.
Ist das zu kompliziert programmiert oder geht es nicht anders?
b) Ich habe festgestellt, dass alle einzelnen Variablen des Ausgabearrays gefüllt sein müssen (und wenn es sich nur um "" handelt), damit eine Übergabe des Arrays an eine Calc-Tabelle erfolgen kann. Ansonsten erscheint der Fehlerhinweis "Objektvariable nicht belegt".
Da ich einige der Array-Positionen aber nicht benötige (die entsprechenden Zellen der Calc-Tabelle, an die das Array übergeben wird, sollen leer bleiben), möchte ich nach dem Dim des Arrays zunächst alle Einzelpositionen mit "" füllen und die von mir verwendeten im weiteren Programmverlauf dann einfach überschreiben. Somit wären alle Positionen wenigstens mit "" belegt.
Gibt es einen Befehl, mit dem ich allen Array-Positionen in einem Vorgang den gleichen Wert, hier also "", zuweisen kann?
Oder gibt es eine andere Lösung dafür bzw. um die Fehlermeldung "Objektvariable nicht belegt" zu vermeiden?
Hier noch mein kompletter optimierter Code:
Code: Alles auswählen
Sub schnell()
dim odata(5)
dim Ausgabe(0 to 7) 'Alternativ kann das Ausgabe-Array von der Größe her auch an das Einlese-Array angepasst werden:
'Ausgabe (LBound(oData()) To UBound(oData()))
oRange = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("A1:A5")
oData() = oRange.getDataArray()
For r=0 to 4 'Alternative mit kleinstem und größtem Wert des Einlese-Arrays: For r = LBound(oData()) To UBound(oData())
x = oData(r) 'Stelle des Wertes im Array
Ergebnis=x(0)
Ergebnis2=Ergebnis/2
Ausgabe(r)=Array(Ergebnis2) ' Übergabe des Ergebnisses an das Ausgabe-Array
next
Ausgabe(5)=Array("test") 'zur Ausgabe müssen alle Array-Positionen wenigstens mit "" gefüllt werden,
'ansonsten erscheint der Fehler "Objektvariable nicht belegt"
Ausgabe(6)=Array("")
Ausgabe(7)=Array("test2")
oRange = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("B1:B8")'Definition des Ausgabebereiches
oRange.setDataArray(Ausgabe())'Übertrag der im Array zwischengespeicherten Ergebnisse an den Ausgabebereich im Tabellenblatt
End Sub
Vielen Dank für eure Hilfe im Voraus!
Lupo
turtle47 hat geschrieben:Hi Lupo,
lupolupp1 hat geschrieben:Was habe ich falsch gemacht?
Dein "oRange.setDataArray(
Ausgabe())"
ist kein Array und kann deshalb nicht verarbeitet werden!
lupolupp1 hat geschrieben:Was fehlt?
Na, das Array welches Du hiermit erzeugst:
Code: Alles auswählen
Sub schnell_1()
mitarrayrechnen3()
Dim Ergebnis (LBound(oData()) To UBound(oData()))
oDoc = ThisComponent
oSheets = oDoc.Sheets
oSheet = oSheets.getByIndex(0)
oRange1 = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("B1:B10")
mitarrayrechnen3 'zunächst Daten einlesen
For r = LBound(oData()) To UBound(oData())
x0 = oData(r) 'Zeile
Berechneter_Wert = x0(0) * 2
Ausgabe(r) = Array(Berechneter_Wert)'Berechneter_Wert in Array schreiben
next
oRange1.setDataArray(Ausgabe())
End Sub
Sub mitarrayrechnen3()' Daten aus Tabelle in Array lesen
oRange = ThisComponent.Sheets().getByIndex(0).getCellRangeByName("A1:A10")
oData() = oRange.getDataArray()
End Sub
Jetzt alles klar?
Jürgen