-

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

Moderator: Moderatoren

Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:15, insgesamt 2-mal geändert.
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: getDataArray -> not assignable by given value?

Beitrag von Karolus »

Hallo
An das DataArray eines Namensbereichs kommt man über:

Code: Alles auswählen

Namerange = oDoc.NamedRanges.getByName("Mengen").getReferredCells().getDataArray() 
das DataArray besteht immer aus einem äusserem (Zeilen)array mit inneren (Spalten)array's

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:16, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: getDataArray -> not assignable by given value?

Beitrag von F3K Total »

Moin,
dieser Code funzt:

Code: Alles auswählen

Sub S_get_variables
    Variables = F_get_solver_variables_from_named_Range("Mengen")
    xray Variables  
end sub

Function F_get_solver_variables_from_named_Range(S_named_Range)as Object
    dim Variables(0) as new com.sun.star.table.CellAddress
    oDoc = ThisComponent
    oNamedRanges = thiscomponent.NamedRanges
    oRangeMengen = oNamedRanges.getbyname(S_named_Range)
    oCellRangeMengen = oRangeMengen.ReferredCells
    oCellRangeMengenRangeAddress = oCellRangeMengen.RangeAddress
    nsheet = oCellRangeMengenRangeAddress.Sheet
    oSheet = oDoc.Sheets(nsheet)'Tabelle auf der der Bereich benamst wurde
    nSC = oCellRangeMengenRangeAddress.StartColumn
    nSR = oCellRangeMengenRangeAddress.StartRow
    nEC = oCellRangeMengenRangeAddress.EndColumn
    nER = oCellRangeMengenRangeAddress.EndRow
    counter = 0
    for i = nSC to nEC
        for k = nSR to nER
            ocell = oSheet.getcellbyposition(i,k)
            Redim preserve Variables(counter)
            Variables(counter) = ocell.celladdress
            counter = counter + 1
        next k
    next i
    F_get_solver_variables_from_named_Range = Variables
End Function
Sollte sich der Namensbereich ausschließlich in einer Spalte befinden, läßt sich der Code deutlich vereinfachen.
Viel Spaß
Gruß R
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:16, insgesamt 1-mal geändert.
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:16, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: getDataArray -> not assignable by given value?

Beitrag von F3K Total »

Hi,
hast Du auf dem Blatt einen Namen "Mengen" vergeben?
Ich denke mal, das wäre dann zu kompliziert, oder?
Überhaupt nicht, darum habe ich die Funktion F_get_solver_variables_from_named_Range geschrieben, die natürlich in deinem Modul stehen muß.
Wann immer du die Zelladressen eines Namensbereiches benötigst, fügst du in deinen Code nur diese Zeile ein:

Code: Alles auswählen

Variables = F_get_solver_variables_from_named_Range("Mengen")
oder

Code: Alles auswählen

Variables = F_get_solver_variables_from_named_Range("Mengen2")
oder

Code: Alles auswählen

Variables = F_get_solver_variables_from_named_Range("Mengenxyz")
Gruß R
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:16, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: getDataArray -> not assignable by given value?

Beitrag von F3K Total »

miamit hat geschrieben:und der Geltungsbereich ist Dokument/global
Bei mir finde ich keine Einstellung Geltungsbereich! Welche Version von OOo hast Du?
miamit hat geschrieben:über dem Beginn meines Subs einfügen?
Egal, drüber oder drunter.
Gruß R
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:16, insgesamt 1-mal geändert.
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:23, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: getDataArray -> not assignable by given value?

Beitrag von F3K Total »

Hallihallo,
miamit hat geschrieben:Wirft Fehler in Zeile 3 raus (xray Variables ) : Sub- oder Function-Prozedur nicht definiert.
heißt nichts weiter, als das Du kein XRay installiert hast, das ist ein Inspection Tool, mit dem ich überprüft habe ob das Ergebnis in Variables() stimmt.
Lösche einfach diesen Part:

Code: Alles auswählen

Sub S_get_variables
    Variables = F_get_solver_variables_from_named_Range("Mengen")
    xray Variables
end sub
Wenn ich Dein Makro richtig verstehe, übergibst Du die Zelladressen in dieser Zeile an den Solver:

Code: Alles auswählen

solv.Variables = Variables()
Ersetze in Deinem Code diese Zeile durch:

Code: Alles auswählen

solv.Variables = F_get_solver_variables_from_named_Range("Mengen")
und es sollte klappen.

Gruß R
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:16, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: getDataArray -> not assignable by given value?

Beitrag von F3K Total »

Du sollst nicht die function, sondern Dein Macro starten ... denn wenn du die function startest, fehlt "Mengen", was du in der eben oben geänderten Zeile übergibst.
Dazu gehst Du in dein Tabellenblatt, Extras/Makros/Makro ausführen ...->zum Makro OptimizeDEPS navigieren->Ausführen
Muss ich eigentlich diese hier löschen
AUF KEINEN FALL!!!
Benutzer 48566 gelöscht

-

Beitrag von Benutzer 48566 gelöscht »

----------
Zuletzt geändert von Benutzer 48566 gelöscht am Mi, 26.06.2024 15:16, insgesamt 1-mal geändert.
Antworten