Seite 1 von 1

[Gelöst] Array-Problem

Verfasst: So, 30.09.2012 00:54
von retuwe61
Hallo miteinander.
Wahrscheinlich ist es nur ein kleine Problem, für das ich keine Lösung finde.
Über eine Listbox und drei Checkboxen eines Dialogs werden Zahlen in dieTabelle "Info" eingetragen, die anschließend die Spalten bestimmen, deren Inhalte aus Tabelle "Daten" in ein neues Dokument, "Tabelle1", kopiert werden sollen. Zudem wird in Tabelle "Info", Zelle J2, eine Prüfsumme errechnet, die aussagt, welche Checkbox angeklickt wurde.
Das funktioniert soweit auch. Leider wird beim anschließenden Kopiervorgang lediglich die erste Spalte berücksichtigt. Wähle ich nur Array1 oder Array2 aus, so wird jeweils die richtige Spalte kopiert. Wie muss ich den Code abändern, damit die beiden richtigen Spalten bestimmt werden?
Bin gespannt.
Gruß
Uwe

Code: Alles auswählen

Sub nDoc_auffuellen
Dim  nDoc as Object
Dim Arg()
Dim nDocView
Dim nURL as String
nURL = "private:factory/scalc"
nDoc=StarDesktop.loadComponentFromURL(nURL, "_blank", 0, Arg())
nDocView = nDoc.CurrentController.Frame.ContainerWindow
'oDocView.Visible = True 'Später:FALSE
       
Dim oSheet1
Dim oSheet2
Dim oSheet3
Dim oCellCursor
Dim letzte_Zeile
Dim Array
Dim Array1
Dim Array2
Dim aQuellSpalte
Dim aZielSpalte
Dim i as Integer

oDoc = thisComponent
oSheet1 = oDoc.Sheets.getByName ("Daten") 'QuellTabelle
oSheet2 = nDoc.Sheets.getByName ("Tabelle1") 'ZielTabelle
oSheet3 = oDoc.Sheets.getByName ("Info") 'InfoTabelle

oCellCursor = oSheet1.createCursor()
oCellCursor.GotoEndOfUsedArea(True)
letzte_Zeile = oCellCursor.getRangeAddress.EndRow

Array1 = oSheet3.getCellRangeByName("B2").getValue

if oSheet3.getCellRangeByName("$J$2").Value = "20009" then 
Array2 = oSheet3.getCellRangeByName("C2").getValue
end if
if oSheet3.getCellRangeByName("$J$2").value = "20018" then 
Array2 = oSheet3.getCellRangeByName("D2").getValue
end if
if oSheet3.getCellRangeByName("$J$2").value = "20027" then
'array2 = oSheet3.getCellRangeByName("E2").getValue
end if

aQuellSpalte = Array(Array1, Array2)
aZielSpalte = Array(0,1)

for i = 0 to 1  

oQuelleRange1=oSheet1.getCellRangeByPosition(aQuellSpalte(i),0,aQuellSpalte(i),letzte_Zeile)
aDat = oQuelleRange1.getDataArray()

oQuelleRange2 = oSheet2.getCellRangeByPosition(aZielSpalte(i),0,aZielSpalte(i),letzte_Zeile)
oQuelleRange2.setDataArray(aDat)

next i
end sub

Re: Array-Problem

Verfasst: So, 30.09.2012 01:42
von F3K Total
Moin,
ich weiss nicht, ob du es wusstest, ein einfaches integer-Array läßt sich z.b. so definieren:

Code: Alles auswählen

Dim nZaehler(2) as integer
nZaehler(0) = 12
nZaehler(1) = 3
nZaehler(2) = 16
oder so:

Code: Alles auswählen

Dim nZaehler(1,1) as integer
nZaehler(0,0) = 1
nZaehler(0,1) = 2
nZaehler(1,0) = 3
nZaehler(1,1) = 4
Dieser Code funktioniert:

Code: Alles auswählen

Sub nDoc_auffuellen
    Dim  nDoc as Object
    Dim Arg()
    Dim nDocView
    Dim nURL as String
    nURL = "private:factory/scalc"
    nDoc=StarDesktop.loadComponentFromURL(nURL, "_blank", 0, Arg())
    nDocView = nDoc.CurrentController.Frame.ContainerWindow
    'oDocView.Visible = True 'Später:FALSE
           
    Dim oSheet1
    Dim oSheet2
    Dim oSheet3
    Dim oCellCursor
    Dim letzte_Zeile
    Dim nQS(1) as integer
    Dim i as Integer
    
    oDoc = thisComponent
    oSheet1 = oDoc.Sheets.getByName ("Daten") 'QuellTabelle
    oSheet2 = nDoc.Sheets.getByName ("Tabelle1") 'ZielTabelle
    oSheet3 = oDoc.Sheets.getByName ("Info") 'InfoTabelle
    
    oCellCursor = oSheet1.createCursor()
    oCellCursor.GotoEndOfUsedArea(True)
    letzte_Zeile = oCellCursor.getRangeAddress.EndRow
    
    nQS(0) = oSheet3.getCellRangeByName("B2").getValue
    
    if oSheet3.getCellRangeByName("$J$2").Value = "20009" then
        nQS(1) = oSheet3.getCellRangeByName("C2").getValue
    end if
    if oSheet3.getCellRangeByName("$J$2").value = "20018" then
        nQS(1) = oSheet3.getCellRangeByName("D2").getValue
    end if
    if oSheet3.getCellRangeByName("$J$2").value = "20027" then
        nQS(1) = oSheet3.getCellRangeByName("E2").getValue
    end if
    
    
    for i = 0 to 1 
        
        oQuelleRange1=oSheet1.getCellRangeByPosition(nQS(i),0,nQS(i),letzte_Zeile)
        aDat = oQuelleRange1.getDataArray()
        
        oQuelleRange2 = oSheet2.getCellRangeByPosition(i,0,i,letzte_Zeile)
        oQuelleRange2.setDataArray(aDat)
        
    next i
end sub
Gruß R

Re: Array-Problem

Verfasst: So, 30.09.2012 17:53
von retuwe61
Ich ziehe mal wieder meinen Hut vor dir. Dein Wissen - und 30 Jahre jünger...;-)
Vielen Dank.
Uwe