Probleme mit Aufgezeichnetem Makro

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: Probleme mit Aufgezeichnetem Makro

Re: Probleme mit Aufgezeichnetem Makro

von Ralf.H » So, 14.03.2010 16:33

Hi Marco,

ich kann nur vermuten, dass Du die Gegebenheiten am Anfang meines Makros überlesen hast:

Das Makro braucht am Anfang DEINER Kundentabelle die Formel '=Anzahl2(B2:B9)', damit der Wert für die for-next-Schleife in der Zeile
-> LastRow = MyTab.getCellByPosition(1,0).value
setzen kann.

Und ja: ich kopiere zuerst den Bereich mit den Namen, damit das Original erhalten bleibt (Du hattest selbst geschrieben, dass Du den sortierten Bereich in Spalte F haben wolltest ...
DANN lasse ich direkt hinter den kopierten Bereich hinter jeden einzelnen Namen (in Spalte G) ebensoviele Zufallszahlen schreiben, wie es Namen gibt
Als nächstes lasse ich den Bereich mit den Namen UND den Zufallszahlen nach den Zufallszahlen sortieren und wenn das erledigt ist, lasse ich die Zufallszahlen wieder löschen, da ich sie ja nicht meh brauche ...

MfG - Ralf

PS: Es gibt sicherlich auch andere Lösungen ;-)

Re: Probleme mit Aufgezeichnetem Makro

von Ralf.H » So, 14.03.2010 02:03

Das sollte -an Deine Gegebenheiten angepasst- funktionieren:

Code: Alles auswählen

sub ZufallSort

' in den Zeilen B2:B9 stehen die Namen
' in Zelle B1 steht die Formel "=Anzahl2(B2:B9)"
' die Tabelle, in der sich das ganze abspielen soll, heisst "Tabelle1"

	dim SortProps(2) as new com.sun.star.beans.PropertyValue
	dim SortFeld(1) as new com.sun.star.table.TableSortField

	dim MyRange as object
	dim MyRangeAdresse as object
	dim MyAdresse as object

	MyTab = thisComponent.Sheets.getByName("Tabelle1")
	LastRow = MyTab.getCellByPosition(1,0).value

' Kopieren der Namen aus Spalte B in Spalte G
	MyRange = MyTab.getCellRangeByPosition(1,1,1,LastRow)
	MyRangeAdresse = MyRange.getRangeAddress
	ZielZelle = MyTab.getCellByPosition(5,1)
	ZielAdresse = ZielZelle.getCellAddress
	MyTab.copyRange(ZielAdresse,MyRangeAdresse)

' Einfügen der Zufallszahlen in Spalte G
	for x = 1 to LastRow
		MyTab.getCellByPosition(6,x).value = Rnd()
	next x

'Sortieren des Bereichs F1:G9
	SortFeld(0).field = 1
	SortFeld(0).IsAscending = true
	SortFeld(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
	
	SortProps(0).Name = "SortFields"
	SortProps(0).Value = SortFeld()
	SortProps(1).Name = "SortColumns"
	SortProps(1).Value = False
	SortProps(2).Name = "ContainsHeader"
	SortProps(2).Value = false
	
	MyTab.getCellRangeByPosition(5,1,6,LastRow).Sort(SortProps())

'Löschen der Zufallszahlen in Spalte F
	MyTab.getCellRangeByPosition(6,1,6,LastRow).ClearContents(255)
end sub

Re: Probleme mit Aufgezeichnetem Makro

von Ralf.H » So, 14.03.2010 01:22

möglich wäre:

1. Ermitteln, wie viele Einträge in Spalte B mit Namen gefüllt sind (z.B. mit =Anzahl2(B1:Bx)
2. Kopieren der Spalte B nach Spalte F
3. Mit einer for-next-Schleife in Abhängigkeit von der Anzahl der eingetragenen Namen in Spalte G (also direkt neben den neuen Namen) eine Zufallszahl generieren
4. Den Bereich in Spalte F und G nach der Zufallszahl sortieren
5. Die Zufallszahlen in Spalte F löschen

Nach oben