Eigenschaft oder Methode nicht gefunden: Value

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

Moderator: Moderatoren

Vanyar
Beiträge: 8
Registriert: Di, 11.09.2018 10:19

Eigenschaft oder Methode nicht gefunden: Value

Beitrag von Vanyar »

Hallöle liebe Leute :)

Ich habe zurzeit ein Problem mit meinem Makro, denn ich bekomme es einfach nicht zum Laufen. Ich habe mir im Netz einiges durchgelesen und dachte eigentlich, dass ich es richtig hinbekommen habe, allerdings wird mir der Fehler "BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: Value." angezeigt. Kann mir jemand sagen, wo der Fehler liegt und wie ich diesen korrigiere?

In den bei "oCellRange" angegebenen Zellen soll der Zellinhalt durch die Zahl 8 ersetzt werden. Das Ganze ist für einen Resetbutton gedacht (der ist schon eingerichtet), sodass alles auf den Ursprungswert 8 zurückgesetzt wird.

Code: Alles auswählen

Sub Talentreset
  Msg = MsgBox ("Sollen die Talente zurückgesetzt werden?", 260, "Talentreset")
  
  If Msg = 6 Then
  ' Ja gedrückt, Funktion wird ausgeführt
  oCalc = ThisComponent
  oSheet = oCalc.sheets(0)
  oCellRange = oSheet.getCellRangeByName("D26:D43","D47:D60","D64:D72","D76:D82","D86:D97","D101:D117")
  oCellRange.Value = 8
  MsgBox "Fertig", 0, "Talentreset"
  
  Else
  ' Nein gedrückt, nichts passiert
  
  End if
End Sub

Vielen Dank für eure Hilfe im Voraus :)
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Eigenschaft oder Methode nicht gefunden: Value

Beitrag von Toxitom »

Morgen Vanyar,
...allerdings wird mir der Fehler "BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: Value." angezeigt...
Na, steht doch eigentlich alles da :))

Dein Objekt (hier "oCellRange") hat keine Eigenschaft "value". Das Objekt ist eine Sammlung (liste) von einzelnen Zellobjekten - und nur die haben eine Eigenschaft Value.

Das heisst, du brauchst an sich ne Schleife, um alle Zellen mit dem Wert zu belegen. Alterntiv könntest Du auch einen DatenArray aufbauen, und den dann gemeinsam zuweisen. Ist aber an sich die gleiche Arbeit.

Noch in Fehler im Code:

Die Zeile : "oCellRange = oSheet.getCellRangeByName("D26:D43","D47:D60","D64:D72","D76:D82","D86:D97","D101:D117")" ist so nicht korrekt.

Die Methode "GetCellRangeByName("") kann nur einen zusammenhängenden Zellbereich aufnehmen - in dem Fall wird also nur die erste Gruppe ausgewertet --> "D26:D43"

Also brauchst Du geschachtelte Schleifen - einmal die Zellbereiche, einmal die einzelnen Zellen. Möglicherweise gibt es andere Lösungen, vielleicht schreibst Du Dir einfach ne Liste der Zellen oder ähnliches, für die erste Zellgruppe könnte es aber wie folgt ausehen:

Code: Alles auswählen

....
  oCellRange = oSheet.getCellRangeByName("D26:D43")
  dim aListe(ubound(oCellRange.getData()))   'liefert Dir die Anzahl der zellen
  for i = 0 to ubound(aliste)
    aListe(i) = array(8)    'die Liste ist ein Array von Arrays, bei Dir nur eine Spalte - also ein Wert
  next
  oCellRange.setDataarray(aListe)
...
UNd nun das Ganze halt noch in einer Schleife über Deine Bereiche.

Also... noch ein wenig Arbeit;)

Im Übrigen empfehle ich Dir ein Tool wie XRAY oder MRI um die Objekte während der Programmierung untersuchen zu können. Solche Hilfsmittel sind wirklich seeeeehr nützlich .

VG Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Vanyar
Beiträge: 8
Registriert: Di, 11.09.2018 10:19

Re: Eigenschaft oder Methode nicht gefunden: Value

Beitrag von Vanyar »

Toxitom hat geschrieben: Fr, 20.12.2019 08:38 Morgen Vanyar,
...allerdings wird mir der Fehler "BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: Value." angezeigt...
Na, steht doch eigentlich alles da :)
Danke schon mal für deine Hilfe ^^
Ich hätte vielleicht dazu sagen sollen, dass ich mich mit Makros noch nicht so richtig auskenne und erst damit angefangen habe, mich damit zu beschäftigen. Auch wenn ich durchaus verstanden hatte, was der Fehler mir gesagt hat, konnte ich trotzdem nicht zuordnen, was genau das Problem war xD
Toxitom hat geschrieben: Fr, 20.12.2019 08:38 Noch in Fehler im Code:

Die Zeile : "oCellRange = oSheet.getCellRangeByName("D26:D43","D47:D60","D64:D72","D76:D82","D86:D97","D101:D117")" ist so nicht korrekt.

Die Methode "GetCellRangeByName("") kann nur einen zusammenhängenden Zellbereich aufnehmen - in dem Fall wird also nur die erste Gruppe ausgewertet --> "D26:D43"
Oh, das ist gut zu wissen. Ich hatte die Info von dieser Seite http://www.dannenhoefer.de/faqstarbasic ... l#Zweig167, dort wird behauptet, dass es so gehen würde. "Man kann auch gleichzeitig mehrere Bereiche auswählen. Dann müssen diese nur mit Komma getrennt eingegeben werden.
getCellRangeByName("A1:B5","C4:D9") ergibt dann den Bereich A1:B5 und C4:D9". Aber dann ist die Angabe dort wohl überholt ^^"
Toxitom hat geschrieben: Fr, 20.12.2019 08:38 Also brauchst Du geschachtelte Schleifen - einmal die Zellbereiche, einmal die einzelnen Zellen. Möglicherweise gibt es andere Lösungen, vielleicht schreibst Du Dir einfach ne Liste der Zellen oder ähnliches, für die erste Zellgruppe könnte es aber wie folgt ausehen:

Code: Alles auswählen

....
  oCellRange = oSheet.getCellRangeByName("D26:D43")
  dim aListe(ubound(oCellRange.getData()))   'liefert Dir die Anzahl der zellen
  for i = 0 to ubound(aliste)
    aListe(i) = array(8)    'die Liste ist ein Array von Arrays, bei Dir nur eine Spalte - also ein Wert
  next
  oCellRange.setDataarray(aListe)
...
UNd nun das Ganze halt noch in einer Schleife über Deine Bereiche.

Also... noch ein wenig Arbeit;)
Also, der Code an sich funktioniert so weit, ich habe mich auch gleich mal schlau gelesen, was genau die einzelnen Komponenten machen. Ich habe es inzwischen auch hinbekommen, es in einer Schleife über die restlichen Zellbereiche zu legen. Du hast mir also sehr gut weitergeholfen ^^
Aber eine Frage habe ich noch: Wie würde der Part "aListe(i) = array(8)" aussehen, wenn es zwei Spalten wären? Ich hoffe, ich mache mit meinen Fragen keine zu großen Umstände ^^
Toxitom hat geschrieben: Fr, 20.12.2019 08:38 Im Übrigen empfehle ich Dir ein Tool wie XRAY oder MRI um die Objekte während der Programmierung untersuchen zu können. Solche Hilfsmittel sind wirklich seeeeehr nützlich .
Ich habe mir mal MRI geholt, glaube aber, dass ich mich da auch erstmal reinfuchsen muss. Es sieht auf den ersten Blick nämlich etwas komplizierter aus xD
Aber danke auf jeden Fall für den Tipp, ich werde mir MRI über die Tage mal etwas genauer ansehen :)
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Eigenschaft oder Methode nicht gefunden: Value

Beitrag von Toxitom »

Hallo Vanyar,
..Aber eine Frage habe ich noch: Wie würde der Part "aListe(i) = array(8)" aussehen, wenn es zwei Spalten wären? ..
Mit setDataArray() wird ein Array von Arrays gesetzt, immer auf einen zusammenhängenden rechteckigen Bereich , wobei es jeweils Zeilenarrays sind. Das heisst, jeder innerer Array repräsentiert genau die Spaltenzahl. Willst Du zwei Spalten füllen, brauchst Du also 2 Elemente im inneren Array. Die Schleife sähe wie folgt aus:

Code: Alles auswählen

...
for i = 0 to ubound(aliste)      'i repräsentiert dabei die Zeilen - also ein Array fpür jede Zeile
    aListe(i) = array(8, 8)    'der innere Array repräsentiert die Spalten (hier also zwei)
next
 ...
Und ja, beide Tools sind etwas einarbeitungs-intensiv, MRI sicher stärker, kann dafür aber auch mehr:) XRAY ist einfacher und reicht mir völlig aus... aber an sich können beide ungefähr das Gleiche.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten