Probleme mit Aufgezeichnetem Makro

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Ralf.H
*
Beiträge: 17
Registriert: Sa, 13.03.2010 17:03

Re: Probleme mit Aufgezeichnetem Makro

Beitrag von Ralf.H »

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
Ralf.H
*
Beiträge: 17
Registriert: Sa, 13.03.2010 17:03

Re: Probleme mit Aufgezeichnetem Makro

Beitrag von Ralf.H »

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
Ralf.H
*
Beiträge: 17
Registriert: Sa, 13.03.2010 17:03

Re: Probleme mit Aufgezeichnetem Makro

Beitrag von Ralf.H »

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 ;-)
Antworten