Seite 1 von 1

Tabellenblätter alphabetisch sortieren?

Verfasst: Di, 16.08.2005 14:10
von RS
Hallo,

ich habe soeben eine Calc-Datei mit insgesamt 31 willkürlich nacheinander eingefügten und benannten Tabellenblättern angelegt. Diese müsste ich nun alphabetisch hintereinander anzeigen lassen.

Ist eine alphabetische Sortierung möglich? Wenn ja - wie?

Danke,

Gruß,

Rebecca

Re: Tabellenblätter alphabetisch sortieren?

Verfasst: Fr, 20.01.2006 13:30
von icke
RS hat geschrieben: Ist eine alphabetische Sortierung möglich? Wenn ja - wie?
Hallo,

habe das gleiche Problem. Nimm doch den Dialog kopieren/verschieben - ist aber recht umständlich, da Du wohl nur das Blatt ans Ende stellen kannst. ;-(

Kann der Navigator nicht eine Sortierfunktion von den Entwicklern spendiert bekommen?

Grüße

Verfasst: Fr, 20.01.2006 13:42
von RS
Hi,

hatte die Anfrage auch noch auf der User-Mailingliste gepostet, dabei kam ein Makro raus, den ich allerdings nie ausprobiert habe, da ich das manuelle Verschieben in meinem Fall einfacher und ausreichend fand.

Falls Du das Makro - ohne Gewähr - haben möchtest, kann ich es Dir schicken, allerdings erst nächste Woche, da ich jetzt ins Wochenende gehe.

Gruß,

Rebecca

Verfasst: Fr, 20.01.2006 14:55
von Stephan
Ich habe schnell mal zwei neue Makros zum Sortieren der Tabellenblätter geschrieben, diese einfach in eine Makrobibliothek von OOo kopieren und mit einer Schaltflche verknüpfen:

Code: Alles auswählen

Sub Sortieren_steigend()
dok = StarDesktop.CurrentComponent
anz = dok.Sheets().Count
dim a(anz-1)
For i = 0 to anz-1
	a(i) = dok.Sheets(i).Name
Next
For i = 0 To anz-2
	For j = i+1 to anz-1
		if LCase(a(i)) < LCase(a(j)) Then Goto z
		temp = a(i)
		a(i) = a(j)
		a(j) = temp
z:	Next j
Next i
For i = 0 to anz-1 
	dok.Sheets.moveByName(a(i),i)
Next i
End Sub

Code: Alles auswählen

Sub Sortieren_fallend()
dok = StarDesktop.CurrentComponent
anz = dok.Sheets().Count
dim a(anz-1)
For i = 0 to anz-1
	a(i) = dok.Sheets(i).Name
Next
For i = 0 To anz-2
	For j = i+1 to anz-1
		if LCase(a(i)) > LCase(a(j)) Then Goto z
		temp = a(i)
		a(i) = a(j)
		a(j) = temp
z:	Next j
Next i
For i = 0 to anz-1 
	dok.Sheets.moveByName(a(i),i)
Next i
End Sub

Gruß
Stephan

Verfasst: Mo, 23.01.2006 14:30
von icke
Vielen Dank an Euch beide!

Die Makros funktionieren hervorragend! :D

Verfasst: Mo, 23.01.2006 14:56
von Toxitom
Hey Stephan,

bitte, bitte nicht.... :wink:

Code: Alles auswählen

if LCase(a(i)) < LCase(a(j)) Then Goto z 
   ....
z:[/quote]
Wir wollen doch auch einen "modernen" und "guten" Programmierstii pflegen :wink:

"GoTo" ist "deprecated" und sollte nicht mehr angewendet werden - auch wenn es natürlich funktioniert. Ausnahme: "On error goto marke"

Bitte einfach ohne "goto" schreiben - der Bubble-Sort Allgoythmus funktioniert genauso. Einfach die Bedingung "rumdrehen":

Code: Alles auswählen

For j = i+1 to anz-1
      if not (LCase(a(i)) < LCase(a(j))) Then 
        temp = a(i)
        a(i) = a(j)
        a(j) = temp
       end if
   Next j 
Oder - noch einfacher - das "Kleinerzeichen" rumdrehen :-)

Gruss
Thomas

Verfasst: Mo, 23.01.2006 16:49
von Stephan
Hallo Thomas,
bitte, bitte nicht....
...
Wir wollen doch auch einen "modernen" und "guten" Programmierstii pflegen


hast ja recht :wink:

... bereits als ich vor 20 Jahren Basic gelernt habe war nicht schön, aber manchmal kommt das ebend immer wieder durch dieses GoTo hier und GoTo da wenn ich nicht aufpasse.


Gruß
Stephan