Bilder-Pyramide aus Rangliste erstellen

Hallöchen!

Ich möchte gerne für meine Rangliste, die in Excel schon existiert, automatisch aus der Tabelle eine Bilder-Pyramide generieren lassen.

Als Vorlage wollte ich „A2-A17“ vom Blatt „Daten“ nehmen. Der Pfad zu den Bildern steht in „U2-U17“. Aussehen sollte es möglichst wie im Blatt „Bilder-Pyramide“. Zum besseren Verständnis habe ich auch die komplette Rangliste hochgeladen.

Reinhard hatte mir damals netterweise bei meiner ersten Idee schon einen Tipp gegeben, allerdings sind meine VBA-Kenntnisse zu spärlich, als dass ich die Formel angleichen könnte :frowning:

Links:
Daten: http://www.kingpong.de/rangliste/daten.gif
Pyramide: http://www.kingpong.de/rangliste/pyramide.gif
Archiv-Artikel: http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…
Rangliste: http://www.kingpong.de/rangliste/rangliste.xls

Über Hilfe Eurerseits würde ich mich sehr freuen (die Kinder natürlich auch :wink:)

Viele Grüße,
Daniel

PS: Wenn das mit den Bildern klappt, modifizier ich die Rangliste so um, dass auch andere Vereine sie nutzen können und biete sie auf http://www.kingpong.de als Download an! Gerne erwähne ich auch Eure Hilfe in der dann beiliegenden Hilfe-Datei!

Re: Hallöchen! :wink:

Ich kann Dir zwar keine Lösung für die Problemstellung anbieten… das werden andere sicher besser können. Aber so wie es ausschaut, wird die (Eure!) Rangliste selbst ja sicher auch im Internet, auf Eurer Vereinsseite, erscheinen.

Dazu zwei Sachen, die mir auffielen und die Du in Deine Überlegungen sofort mit einbeziehen könntest:

– Sämtliche Verlinkungen UND Dateinamen (z.B. auf die Bilder wie „Jan.jpg“) sollten möglichst (1) in Kleinbuchstaben sein, damit bei einem Upload auf den Server die Verlinkungen in jedem Falle von jedem Betriebssystem aus usw. funktionieren. Windows bringt da so seine Tücke mit, weil es nicht „case-sensitiv“ ist.
(2) Links sollten relativ zu dem Dokument stehen, egal, ob es dann ein HTML-Dokument wird oder bei einer Excel-Datei bleibt.

Zu (1) evtl. die Lower-Case-Funktion von Excel verwenden, besser aber auch die Dateinamen klein schreiben („Jan.jpg“ -> „jan.jpg“).

Zu (2) ein Beispiel: Das Excel-Dok. sei bei Dir lokal abgelegt als „D:\rangliste\rangliste2004.xls“ und die Bilder dann im Ordner „D:\rangliste\bilder“. Die spätere Domain ist z.B. http://www.kingpong.de/ . – Im Excel-Dokument würde ich dann die Verlinkungen z.B. auf „./bilder/jan.jpg“ vornehmen. Dabei steht der Punkt vor dem ersten Slash für das aktuelle Verzeichnis. Somit bleibt, vom Excel-Dok. ausgehend der Pfad auch nach einem Upload immer relativ. :wink:
Trotzdem aber einmal testen, ob und wie die Verlinkung (http://) auch im Web funktioniert.

Gruss & CU DannyFox64

Links:
Daten: http://www.kingpong.de/rangliste/daten.gif
Pyramide: http://www.kingpong.de/rangliste/pyramide.gif
Archiv-Artikel:
http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…
Rangliste: http://www.kingpong.de/rangliste/rangliste.xls

Ich möchte gerne für meine Rangliste, die in Excel schon
existiert, automatisch aus der Tabelle eine Bilder-Pyramide
generieren lassen.

Als Vorlage wollte ich „A2-A17“ vom Blatt „Daten“ nehmen. Der
Pfad zu den Bildern steht in „U2-U17“. Aussehen sollte es
möglichst wie im Blatt „Bilder-Pyramide“. Zum besseren
Verständnis habe ich auch die komplette Rangliste hochgeladen.

Hallo Daniel,
habe den Code im Modul Bilder_Pyramide umgeschrieben, ersetze bitte den alten durch den neuen Code.
Zum Verständnis und für deine Anpassungen, Grafiken und Textboxen werden beim Einfügen durch die Angabe von Top,Left,Weight,Height positioniert.
Die obere linke Ecke des Tabellenblatts hat Top=0 und Left=0. Auf diese Ecke beziehen sich die Angaben von Top und Left der Bilder bzw Textboxen. Mit dem Wissen kannst du die Positionen und Größen leicht anpassen.
Wenn du die Textboxen (Namenskästchen) farbiger willst, so zeichne dir am besten ein Makro auf wo du eine Textbox mit beliebigem Text erstellst (Ansicht–Symbolleisten–Zeichnen), dann mit rechts drauf klicken und Textfeld formatieren auswählen. Dann farbe festlegen, Makro beenden. Dann den Code des Makros anschauen und dort die Einträge die die Frabe betreffen in meinen Code übernehmen.
Dein sortieren scheint nicht zu funktionieren!?
Gruß
Reinhard

Sub Bilder\_einfuegen()
Bildhöhe = 100
Bildbreite = 75
VA = 20 'vertikaler Abstand zwischen den Bildern in Pukten
HA = 20 ' horizontale Abstand zwischen den Bildern
Dim PosT(16) ' Top-Position der Bilder
Dim PosL(16) ' Left-Position der Bilder
Worksheets("Bilder-Pyramide").Activate
Bilder\_loeschen
anz = Worksheets("Daten").Range("U65536").End(xlUp).Row - 1 'Anzahl Einträge in Rangliste
PosT(1) = 0
PosL(1) = 300
For n = 2 To 4
 PosT(n) = PosT(1) + Bildhöhe + VA
 PosL(n) = PosL(1) - Bildbreite - HA + (n - 2) \* (Bildbreite + HA)
Next n
For n = 5 To 9
 PosT(n) = PosT(2) + Bildhöhe + VA
 PosL(n) = PosL(2) - Bildbreite - HA + (n - 5) \* (Bildbreite + HA)
Next n
For n = 10 To 16
 PosT(n) = PosT(5) + Bildhöhe + VA
 PosL(n) = PosL(5) - Bildbreite - HA + (n - 10) \* (Bildbreite + HA)
Next n
For n = 1 To anz
 Worksheets("Bilder-Pyramide").Pictures.Insert(Worksheets("Daten").Cells(n + 1, 21)).Select
 Selection.Top = PosT(n)
 Selection.Left = PosL(n)
 Selection.Height = Bildhöhe
 Selection.Width = Bildbreite
 ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, PosL(n), PosT(n) + Bildhöhe, \_
 Bildbreite, 20).Select
 Selection.Characters.Text = n & ". " & Worksheets("Daten").Cells(n + 1, 2)
 With Selection.Characters(Start:=1, Length:=10).Font
 .Name = "Arial"
 .FontStyle = "Standard"
 .Size = 10
 .Strikethrough = False
 .Superscript = False
 .Subscript = False
 .OutlineFont = False
 .Shadow = False
 .Underline = xlUnderlineStyleNone
 .ColorIndex = xlAutomatic
 End With
 Selection.HorizontalAlignment = xlCenter
Next n
Range("a1").Select
End Sub

Sub Bilder\_loeschen()
 Dim bild As Shape
 For Each bild In ThisWorkbook.Worksheets("Bilder-Pyramide").Shapes()
 bild.Delete
 Next bild
ThisWorkbook.Worksheets("Bilder-Pyramide").UsedRange.ClearContents
End Sub

Nachtrag
Hallo Daniel,
Die Anzahl der Bilder die gezeichnet werden, ermittelt der Code in dem es den letzten Eintrag in Spalte U ermittelt (siehe anz=… im Code).
Falls es also keine 16 Spieler gibt, kannst du entweder die letzten Ränge in Spalte U frei lassen oder dort ein Bild angeben wie dieses —.jpg.
Der Code prüft nur den letzten Eintrag in Spalte U, falls davor in der Liste ein Bildpfad fehlt führt das zu einem Programmfehler. Also für Spieler wo du kein Bild hast muss dann ein Ersatzbild eingetragen werden.
Gruß
Reinhard

DANKE!
Hallo Reinhard,

vielen Dank für den maßgeschneiderten VBA-Code! Damit bin ich der Realisierung meiner Vorstellung einen sehr großen Schritt weiter gekommen. Ich bin erst heute dazu gekommen, Deinen Code auszuprobieren, deshalb schreibe ich auch erst jetzt. Es klappt einwandfrei! Die Kinder werden sich freuen, wenn ich ihnen das Resultat zeige :wink:

Gruß Daniel

DANKE!
Hallo DannyFox64,

vielen Dank für die Info! Ich werde Deinen Tipp in den nächsten Tagen ausprobieren, wenn ich das Layout fertig habe.

Viele Grüße,
Daniel