Seite 1 von 1
Re: Zelleninhalt in eine Liste Kopieren
Verfasst: Di, 06.07.2010 18:23
von komma4
Schleifen?
Folgender Code kopiert Werte (nummerische Eingaben). Handelt es sich um Zeichen(-ketten), dann ist im Code
get-/setValue durch
get-/setString zu ersetzen.
Einschränkung: auf der Seite gibt es nur die Eingabe in A1 und die Fortschreibung in B.
Sind mehr Daten (Spalten) vorhanden, muss ich noch ein bissel basteln.
Das klappt, bis die letzte Zeile gefüllt ist.
Tabellennamen anpassen!
Code: Alles auswählen
Sub de39960
oDok = ThisComponent
oBlatt = oDok.Sheets.getByName( "Tabelle7" )
oCursor = oBlatt.createCursor()
oCursor.gotoEndofUsedArea( TRUE )
aAddresse = oCursor.getRangeAddress()
oBlatt.getCellByPosition( 1 , aAddresse.EndRow + 1 ).setValue( oBlatt.getCellByPosition( 0, 0 ).getValue() )
End Sub
Hilft Dir das?
Re: Zelleninhalt in eine Liste Kopieren
Verfasst: Di, 06.07.2010 19:09
von DPunch
Aloha
komma4 hat geschrieben:Folgender Code kopiert Werte (nummerische Eingaben). Handelt es sich um Zeichen(-ketten), dann ist im Code get-/setValue durch get-/setString zu ersetzen.
Die Unterscheidung sollte man mit einem DataArray doch umgehen können, oder?
Code: Alles auswählen
oDok = ThisComponent
oBlatt = oDok.Sheets.getByName( "Tabelle7" )
oCursor = oBlatt.createCursor()
oCursor.gotoEndofUsedArea( TRUE )
aAddresse = oCursor.getRangeAddress()
nLetzteZeile = aAddresse.EndRow
aQuellData = oBlatt.getCellByPosition( 0, 0 ).DataArray
If Len(oBlatt.getCellByPosition(1,nLetzteZeile).String) = 0 Then
For i = 0 To nLetzteZeile
If Len(oBlatt.getCellByPosition( 1 , i ).String) = 0 Then
oBlatt.getCellByPosition( 1 , i ).setDataArray(aQuellData)
Exit Sub
End If
Next i
Else
oBlatt.getCellByPosition( 1 , nLetzteZeile+1 ).setDataArray(aQuellData)
End If
Re: Zelleninhalt in eine Liste Kopieren
Verfasst: Mi, 07.07.2010 06:00
von komma4
DPunch hat geschrieben:Die Unterscheidung sollte man mit einem DataArray doch umgehen können, oder?
Ja, guter Vorschlag (wollte mir es halt einfach machen

)
Habe jetzt auch nochmal nach dem Cursor für einen Bereich geschaut, damit kann man die SCHLEIFE umgehen.
Variante2:
Code: Alles auswählen
Sub de39960_2
oDok = ThisComponent
oBlatt = oDok.Sheets.getByName( "Tabelle7" )
letzteZeile = oBlatt.getRows().getCount()
oBereich = oBlatt.getCellRangeByName( "B1:B" & letzteZeile )
oCursor = oBlatt.createCursorByRange( oBereich )
oCursor.gotoEndofUsedArea( TRUE )
If oCursor.Rows.Count = letzteZeile Then
Print "Spalte ist voll - kann nicht kopieren!"
Else
aQuellData = oBlatt.getCellByPosition( 0, 0 ).getDataArray()
oBlatt.getCellByPosition( 1 , oCursor.Rows.Count ).setDataArray( aQuellData )
End If
End Sub
Schlagwörter für die Suchfuktion:
"letzte Zelle", "letzte Zeile", "gefüllt im Bereich"
Re: Zelleninhalt in eine Liste Kopieren
Verfasst: Mi, 07.07.2010 08:49
von Stephan
Die Unterscheidung sollte man mit einem DataArray doch umgehen können, oder?
Funktioniert, ist aber für einzelne Zellen, unter benannten Randbedingungen, eher nicht nötig, sondern es sollte reichen statt .Value oder .String einfach .FormulaLocal zu nutzen (geht natürlich nur unter den genannten Randbedingungen, also das die Zellen keine Formeln enthalten).
Gruß
Stephan
Re: Zelleninhalt in eine Liste Kopieren
Verfasst: Mi, 07.07.2010 17:44
von DPunch
Aloha
Stephan hat geschrieben:sondern es sollte reichen statt .Value oder .String einfach .FormulaLocal zu nutzen
Hast absolut Recht, unter diesen simplen Bedingungen ist das die beste Lösung - vor allem, da man mit FormulaLocal im Gegensatz zum DataArray auch z.B. Datumsangaben "korrekt" kopiert (DataArray nimmt dabei den internen Wert des Datums).