[GELÖST] Objektvariable nicht belegt

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Nopsi
Beiträge: 8
Registriert: Di, 09.06.2020 13:23

[GELÖST] Objektvariable nicht belegt

Beitrag von Nopsi »

Hallo zusammen
Im folgenden Code bekomme ich immer einen Laufzeitfehler.

Code: Alles auswählen

 
mydata = ThisComponent.Sheets.getByName(sht).getCellRangeByPosition(0,oFound.RangeAddresses(0).StartRow,0,oFound.RangeAddresses(0).Endrow).getDataArray()
    dim i as Integer
    dim c as Integer
    dim datumrudi as variant
    dim b as Integer
    i=0
    c=1
    b=0
    datumrudi(b) = mydata(b)
    Do While mydata(c) <> ""
        if mydata(i) <> mydata(c) then
         b=b+1
         datumrudi(b)= mydata(c)
         c=c+1
         i=i+1
        endif
    Loop
    
und zwar speziell in dieser Zeile

Code: Alles auswählen

Do While mydata(c) <> ""
Wenn ich allerdings die Werte von mydata anzeigen lasse ist dies nicht leer. Warum bekomme ich diesen Fehler? Kann mir da bitte jemand weiter helfen?

MfG
Nopsi
Zuletzt geändert von Nopsi am Di, 21.07.2020 12:32, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Objektvariable nicht belegt

Beitrag von Stephan »

Warum bekomme ich diesen Fehler?
Die konkrete 'verbale' Fehlermeldung ist etwas irreführend, denn da ist eigentlich keine Objektvariable.

Der Fehler ist das mydata(c) keinen (Einzel-)Wert enthält, sondern ein Array von Werten, was formal auch gilt wenn es nur um eine Spalte geht.

Statt:

Code: Alles auswählen

Do While mydata(c) <> ""
müsste dort stehen:

Code: Alles auswählen

Do While mydata(c) (0) <> ""
oder:

Code: Alles auswählen

x =  mydata(c) 
Do While x(0) <> ""


GRuß
Stephan
Nopsi
Beiträge: 8
Registriert: Di, 09.06.2020 13:23

Re: Objektvariable nicht belegt

Beitrag von Nopsi »

Hallo Stephan
das verstehe ich nicht ganz. Also mydata ist als Variant initialisiert und wird dann zu einen string. Wenn ich einen beobachter auf mydata ansetzte zeigt er ganz normal die werte des arrays an die ich dann mit mydata(b) bzw mydata(0) versuche anzusprechen. Jetzt verstehe ich nicht ganz warum ich nachdem ich das entsprechende feld im array mit mydata(b) bzw mydata(0) angegeben habe nochmal "(0)" angeben muss?

Ok. Als ich gerade den screenshot gemacht habe, habe ich gesehen das da nochmal "(0)" steht. Aber warum?
Bitte aufklären.

MfG Nopsi
Dateianhänge
Unbenannt.png
Unbenannt.png (7.94 KiB) 2781 mal betrachtet
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Objektvariable nicht belegt

Beitrag von Stephan »

.getDataArray() liefert immer ein Array mit den Daten des entsprechenden Bereichs in der Form das ein Array der Form (0,n) (eine Spalte und n-Zeilen) entsteht das in jeder Zelle die Werte eine Zeile des Bereiches als Array enthält.

Beispiel:

Wenn die Zellen A1:C3 alle den Wert 1 enthalten und ich sie mit .getDataArray() lese wie folgt:

Code: Alles auswählen

myData = ThisCopmponent.Sheets(0).getCellRangeByName("A1:C3").getDataArray()
dann entspricht der Inhalt von myData (vergleichweise) dem hier:

Code: Alles auswählen

Dim myData(2)
myData(0) = Array(1,1,1)
myData(1) = Array(1,1,1)
myData(2) = Array(1,1,1)
hat man:

Code: Alles auswählen

myData = ThisCopmponent.Sheets(0).getCellRangeByName("A1:C3").getDataArray()
und will auf den Wert zugreifen der aus B1 kommt, so ist das:

Code: Alles auswählen

Msgbox myData (0) (1)
oder für A1:

Code: Alles auswählen

Msgbox myData (0) (0)
d.h. die Zahl in der ersten (linke) KLammer nimmt normal Bezug auf myData und die Zahl in der zweiten Klammer auf das Array in der Zelle von myData, die durch die erste Klammer bestimmt ist

Vielleicht ist die folgende Abbildung leichter zu verstehen:

Array_in_Array.gif
Array_in_Array.gif (8.97 KiB) 2767 mal betrachtet



Gruß
Stephan
Nopsi
Beiträge: 8
Registriert: Di, 09.06.2020 13:23

[GELÖST] Objektvariable nicht belegt

Beitrag von Nopsi »

Hallo Stephan,
vielen Dank für die umfangreiche Erklärung und das du dir die Zeit dafür genommen hast. Hat mir sehr weiter geholfen.

MfG
Nopsi
Antworten