ich habe wieder mal ein Problem bei dem ich auf Eure Hilfe hoffe.
Grundgedanke:
Ich habe in der Tabelle n-Materialien angelegt. Jetzt möchte ich eine Liste in einem Dialog erzeugen die mir spaltenweise alle Materialien auflistet.
die Spalten beinhalten die MaterialBezeichnung die Materialnummer und die material Stärke event. noch die ID des Materials
Im Makro Kochbuch habe ich auf der Seite 149 ein Beispiel gefunden was mir zusagt.
Da aber dort ein Festgelegtes Array definiert im Code steht Ich aber nicht wei9 ob ich 5 Materialien oder 30-Materialien angelegt habe muss ich mir selber ein Array bauen das alle angelegten Materialien beinhaltet.
Unter dem Code Makro Kochbuch die ich asl Code anhänge funktioniert das Ganze so wie ich es mir vorstellen
Unter dem Code Mein Versuch bekomme ich zar die Liste aber immer nur die erste Spalte .
Kann mir jemand sagen was ich hier verkehrt maxhe
Ich hänge auch eine Beispieldatei an
Code aus Makro Kochbuch Seite 149
Code: Alles auswählen
Sub MakroKochBuch
dim aListe()
dim aFeldlen()
dim sSpTr as string
aListe = Array(Array("Balsaholz","Balsaholz_02"," 2mm"), _
Array("Balsaholz","Balsaholz_04"," 4mm"), _
Array("Furnierplatte","Furnierplatte_04"," 4mm"), _
Array("Furnierplatte","Furnierplatte_06"," 6mm"), _
Array("Furnierplatte","Furnierplatte_08","10mm"))
aFeldLen = array(27,27,7)
DialogLibraries.loadLibrary("Standard")
oDlg = createUnoDialog(DialogLibraries.Standard.dlg_Liste) 'Dialog erzeugen
oDlg.getControl("List_1").model.stringItemList = ListeSymAufbereiten(aListe, aFeldlen(), "", 0)
if NOT (oDlg.execute() = 1) then exit sub
end sub
function ListeSymAufbereiten(aListalt, aFeldlen(), sSpTr as string, iSpTrTyp as integer )
dim aListe(), aDSalt()
dim sZeile as string, n%, j%, i%, sTxt as string
'iSpTrTyp= 5
if uBound(aListalt()) > -1 then redim aListe(uBound(aListalt()))
for i = 0 to uBound(aListe())
aDSalt = aListalt(i)
sZeile = ""
for j = 0 to uBound(aFeldLen())
n = aFeldLen(j)
sTxt = aDSalt(j)
if len(sTxt) > n-1 then
if NOT (len(sTxt) <= 3) then sTxt = left(sTxt, n-3) & ".. "
else
sTxt = sTxt & Space(n-len(stxt))
end if
sZeile = sZeile & sTxt
select case iSptrTyp
case 1 'erste Spalte trennen
if (j=0) then sZeile = sZeile & sSpTr
case 2 'letze Spalte trenen
if (j=uBound(aFeldLen())-1) then sZeile = sZeile & sSpTr
case 5 'alle Spalten Trennen
if NOT (j = uBound(aFeldLen())) then sZeile = sZeile & sSpTr
end select
next j
aListe(i) = sZeile
next i
ListeSymAufbereiten = aListe()
end function
Code: Alles auswählen
sub MeinVersuch
dim aListe()
dim aFeldlen()
oDoc=Thiscomponent
Oview=odoc.currentcontroller
mySheet = ThisComponent.Sheets.getByName("Material") ' Tabelle in die Variable MySheet aufnehmen
oView.setActiveSheet(mySheet) ' Die in der Variablen TBlatt01 definierte Tabelle ("Hintergrund") aktivieren
anzMat = mysheet.getCellRangeByName("E1").Value ' Den Zahlenwert aus der Zelle E2 in die Variable anzMat aufnehmen
Zeile=4
dim Data(anzMat-1,2)
for i=0 to 1
'Teil in dem ich versuche die stärke unterinander zu bekommen (Wenn Stärke einstellig ist....)
'MatBez=mysheet.getCellRangeByName("C"+Zeile).String
'MatNr=mysheet.getCellRangeByName("D"+Zeile).String
'MatSt=mysheet.getCellRangeByName("E"+Zeile).Value
'If MatSt<=9 then
' MatSt= " "+ Str(MatSt)+"mm"
'else
' MatSt= Str(MatSt)+"mm"
'end If
'wenn der vorheige Teil funzt soll hier statt mysheet.... "C"+Zeile).string nur der Variablenname MatBezstehen
Data(i,0)=mysheet.getCellRangeByName("C"+Zeile).String
Data(i,1)=mysheet.getCellRangeByName("D"+Zeile).String
Data(i,2)=mysheet.getCellRangeByName("E"+Zeile).String
Zeile=Zeile+1
next i
aFeldLen = array(27, 27,5)
aListe=data()
DialogLibraries.loadLibrary("Standard")
oDlg = createUnoDialog(DialogLibraries.Standard.dlg_Liste) 'Dialog erzeugen
oDlg.getControl("List_1").model.stringItemList = ListeSymAufbereiten(aListe, aFeldlen(), "", 0)
if NOT (oDlg.execute() = 1) then exit sub
[attachment=0]test.ods[/attachment]
End Sub
function ListeSymAufbereiten(aListalt, aFeldlen(), sSpTr as string, iSpTrTyp as integer )
dim aListe(), aDSalt()
dim sZeile as string, n%, j%, i%, sTxt as string
'iSpTrTyp= 5
if uBound(aListalt()) > -1 then redim aListe(uBound(aListalt()))
for i = 0 to uBound(aListe())
aDSalt = aListalt(i)
sZeile = ""
for j = 0 to uBound(aFeldLen())
n = aFeldLen(j)
sTxt = aDSalt(j)
if len(sTxt) > n-1 then
if NOT (len(sTxt) <= 3) then sTxt = left(sTxt, n-3) & ".. "
else
sTxt = sTxt & Space(n-len(stxt))
end if
sZeile = sZeile & sTxt
select case iSptrTyp
case 1 'erste Spalte trennen
if (j=0) then sZeile = sZeile & sSpTr
case 2 'letze Spalte trenen
if (j=uBound(aFeldLen())-1) then sZeile = sZeile & sSpTr
case 5 'alle Spalten Trennen
if NOT (j = uBound(aFeldLen())) then sZeile = sZeile & sSpTr
end select
next j
aListe(i) = sZeile
next i
ListeSymAufbereiten = aListe()
end function
also schon mal vielen Dank im Voraus für eure Hilfe
Gruß Dirk