Seite 1 von 1
bestimmte blätter löschen
Verfasst: Mo, 17.12.2007 11:05
von kannenklaus
hallo
ich will alle blätter bis auf des erste mit dem index 0 löschen. hierzu habe ich folgendes makro verwendet. meine frage ist nun, ob es auch eleganter gelöst werden kann.
Code: Alles auswählen
sub BlaetterLoeschen
Dim i as integer, BlattAnz as integer
Dim s as string
BlattAnz=thisComponent.sheets.count-1
'--mit Ausnahme des ersten alle Blätter löschen
for i = 1 to BlattAnz
if thisComponent.sheets.count=0 then exit for
s=thisComponent.sheets(i).name
with thisComponent
.Sheets.RemoveByName(s)
BlattAnz=thisComponent.sheets.count-1
end with
i=i-1
next
end sub
danke klaus
Re: bestimmte blätter löschen
Verfasst: Mo, 17.12.2007 11:41
von komma4
Eine Calc Datei muss immer ein Tabellenblatt haben - beim Versuch das letzte zu löschen bekommst Du einen Fehler.
Ansonsten kannst Du doch auch über den Index löschen:
Code: Alles auswählen
anzSheets = ThisComponent.Sheets.Count
If anzSheets > 1 then
for i = (anzSheets - 1) to 1 step by - 1
ThisComponent.Sheets.removeByIndex( i )
next i
End If
Zählweise "von hinten", damit intern der Index stimmt, wenn gelöscht wurde.
Alles klar?
Re: bestimmte blätter löschen
Verfasst: Mo, 17.12.2007 12:16
von Stephan
ob es auch eleganter gelöst werden kann
ja, weil ein For-Next unelegant ist wenn es um eine eigentlich unbestimmte Anzahl von Wiederholungen geht.
Beispielsweise ist ein Do-Loop für diesen Zweck passender, da die Anzahl der Blätter bei Start des Makros auch 1 sein kann, sollte das Do-Loop kopfgesteuert(*) sein:
Code: Alles auswählen
Sub BlaetterLoeschen2()
With ThisComponent
Do While .sheets.count-1 > 0
.Sheets.RemoveByName(.sheets(.sheets.count-1).name)
Loop
End With
End Sub
(*)
umganssprachlich heißt sowas wie:
kopfgesteuert, und sowas wie:
fußgesteuert
Ansonsten kannst Du doch auch über den Index löschen:
.RemoveByIndex finde ich nirgens als Methode für diesen Zweck und es läuft hier auch nicht
Gruß
Stephan
Re: bestimmte blätter löschen
Verfasst: Mo, 17.12.2007 13:21
von kannenklaus
hallo stefan und winfried,
stefan hat recht. die methode removeByIndex hätte ich zwar auch erwartet. aber xray zeigt, dass es die nicht gibt. der code von stefan läuft bestens.
danke an euch beiden.
gruß klaus
Re: bestimmte blätter löschen
Verfasst: Mo, 17.12.2007 13:29
von komma4
Schäm!
Vor dem Frühstück "aus dem hohlen Bauch" heraus geantwortet - ohne in der Doku nachzusehen....
Stephan hat natürlich recht: bei den sheets gibt's keine Methode removeByIndex
Re: bestimmte blätter löschen
Verfasst: Mo, 17.12.2007 15:14
von gschuckar
Hallo,
wenn die Sheets noch keinen anderen Namen haben, als den, den ooffice vorgibt (z.Bsp. Tablle1,Tabelle2, etc),
dann mache ich das so:
Code: Alles auswählen
private function delSystemSheets() as boolean
dim oDoc as Object
dim oSheets as Object
dim i as integer
oDoc = thisComponent
oSheets = oDoc.getSheets()
' i kann auch 2 oder jeden anderen Wert haben,
' je nachdem, wieviel Sheets bleiben sollen
for i = 1 to oSheets.getCount()
if oSheets.hasByName("Tabelle" & i) then
oSheets.removeByName("Tabelle" & i)
end if
next
delSystemSheets = true
end function ' delSystemSheets
Hilft das ein wenig weiter?
Gruß
Gerd