Hallo,
ich habe den Eindruck, dass Du Dich zwar schon einigermaßen mit der Programmierung auskennst,
aber es sind noch Passagen im Code die daraufhin deuten, dass noch Nachholbedarf ist.
Mitten in Deinem Code steht diese Anweisung:
Dies ist auf keinen Fall korrekt.
"Option Explicit" muss immer an oberster Stelle des Codes stehen. Also noch über Deiner Function!
Viele Programmierer verzichten auf die Anweisung "Option Explicit", aus meiner Sicht ist
diese sehr nützlich, gerade weil man auf Deklarationsfehler hingewiesen wird.
Auch in diesem Buch wird dazu geraten:
http://www.prooo-box.org/live/dokumenta ... eutsch.pdf
Siehe auch hier:
https://wiki.openoffice.org/wiki/DE/Mak ... #Variablen
Der nächste Punkt ist:
Man darf global deklarieren, aber es ist nicht ganz ungefährlich, denn eine solch deklarierte
Variable bleibt auch dann noch gültig wenn der eigentliche Code abgearbeitet wurde.
Sie wird erst dann aus dem Speicher gelöscht, wenn Office und die Basic-IDE geschlossen werden!
Deshalb ist es so besser, weil Public nur innerhalb des Moduls gültig ist.
Trotzdem war die Deklaration noch nicht perfekt.
Weil keine Angabe zum Datentyp gemacht wurde, sind beide Variablen vom Typ "Variant".
Deshalb:
Code: Alles auswählen
REM ***** BASIC *****
Option Explicit
Public oRange as Object
Public oListener as Object
Dies spiegelt exakt die Reihenfolge wieder, wie sie im Modul stehen sollte.
Erst → Option Explicit
Dann → die modulweit gültigen Variablen.
Andere Varablen werden in den Functions und den Sub-Routinen deklariert.
Diese sind dann auch nur dort gültig, wo sie deklariert wurden.
Innerhalb Deiner Routine "Sub Benutzerdaten" verwendest Du z.B.
i
oSheet
oCell
Alle drei sind nicht deklariert. Dieses ist die nächste Fehlerquelle.
Code: Alles auswählen
Sub Benutzerdaten
Dim nutzer as Object ' Objekt
Dim reg_daten as Object ' Objekt
Dim oSheet as Object ' Objekt
Dim oCell as Object ' Objekt
Dim i as Long ' Integer oder Long. Bei diesem Zähler würde Integer ausreichen.
Dim DATEN(13, 1) ' Arrays verwende ich auch meist den Datentyp VARIANT, weil Arrays unterschiedliche Inhalte haben können
Dim ergebnis ' STRING ?
Dim profil(0) as new com.sun.star.beans.PropertyValue
https://wiki.openoffice.org/wiki/DE/Mak ... c_Tutorial
------------------------------------------------------------------
Eine Optimierung liegt noch in der Abarbeitung Deines Arrays "DATEN(13, 1)".
Ein Zellbereich ist im Grunde nichts anderes als ein "Array von Arrays".
Dein Array kann anders dimensioniert und befüllt werden.
Danach läßt es sich in einem Rutsch in das Tabellenblatt schreiben.
Zellbereich referenzieren:
Code: Alles auswählen
Dim oRange as Object
oRange=osheet.getCellRangeByName("A1:A10")
Array dimensionieren und vorhandene Daten aus Zellbereich in Array schreiben:
Jetzt hast Du ein "Array von Arrays", welches mit weiteren Daten befüllt werden kann, z.B. mit einer Schleife.
Code: Alles auswählen
For i = 0 to uBound(DATEN()) ' ZEILEN bzw. Datensätze
for j = 0 to 9 ' Spalten bzw. Felder
DATEN(i)(j) = ' irgendwelche Daten
next j
Next i
Wie die Schleife gestaltet ist, hängt von den gewünschten Daten ab, so kann man u.U. die innere Schleife weglassen.
Wichtig ist nur die richtige Indexanpassung, ggf. muss ein separater Zähler eingebaut werden.
Array in Tabelle schreiben
Der Zellbereich muss genau so groß sein wie die Array-Dimnsionierung.
Ich hoffe Du kommst mit meine Info's ein Stück weiter.
Wenn Du noch Probleme hast, dann bitte möglichst genau beschreiben. Danke.