bestimmte blätter löschen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: bestimmte blätter löschen

Re: bestimmte blätter löschen

von gschuckar » Mo, 17.12.2007 15:14

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

Re: bestimmte blätter löschen

von komma4 » Mo, 17.12.2007 13:29

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

von kannenklaus » Mo, 17.12.2007 13:21

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

von Stephan » Mo, 17.12.2007 12:16

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:

Code: Alles auswählen

Do While <Bedingung>
	'...
Loop
kopfgesteuert, und sowas wie:

Code: Alles auswählen

Do
	'...
Loop While <Bedingung>


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

von komma4 » Mo, 17.12.2007 11:41

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?

bestimmte blätter löschen

von kannenklaus » Mo, 17.12.2007 11:05

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

Nach oben