Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1264to1268
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bilderanzeige per Listbox

Bilderanzeige per Listbox
dave
https://www.herber.de/bbs/user/80363.xlsm
Hallo zusammen,
Ich habe ein Sheet, auf dem mehrere Grafiken dargestellt sind. Jede Grafik steht für ein bestimmtes Monatsthema. Grundsätzlich sollte nur der jüngste Monat angezeigt werden, aber die alten Monate sollen bei Bedarf auch anzeigbar sein.
Ich habe es momentan so gelöst, wie in der Beispielmappe ersichtlich.
Die Listbox wird beim Aufruf des Blattes mit allen Grafiken, die im Namen ein "SHE" tragen, gefüllt. Die Grafik, die momentan als im Vordergrund formatiert ist, wird in der Listbox angezeigt.
Wenn man in der Listbox einen Eintrag auswählt, wird diese Grafik auf "sichtbar" gesetzt, in den Vordergrund gerückt und alle anderen Grafiken auf "unsichtbar" gesetzt.
Im Prinzip funzt das auch soweit.
Allerdings habe ich noch 2 Baustellen:
1. Die Einträge in der Listbox sind unsortiert. Dort sollten aber die Monate chronologisch aufgelistet sein. Ich könnte das mit meinen VBA-Kenntnissen nur sehr umständlich manuell hinbekommen. Vielleicht kennt ja jemand einen einfachen "Trick". Wahrscheinlich müsste man die Liste der Grafiken in das Blatt eintragen, sortieren und dann wieder auslesen?
2. Wenn nun ein neues Monatsthema dazukommt, wird im Prinzip einfach nur die Grafik reinkopiert. Hierbei müsste nun sichergestellt werden, dass diese dann den korrekten Namen erhält (Dialogbox?) - ohne dass derjenige, der dass macht, VBA- oder erweiterte Excel-Kenntnisse braucht. Lässt sich das realisieren und wenn ja, wie?
Wäre super, wenn sich jemand der Sache annehmen könnte.
Danke vorab.
Gruß
David
Antwort zu 1. : Manuelle Sortierung der Bilder
31.05.2012 12:36:31
NoNet
Hallo David,
zu 1.: SO umständlich ist das Sortieren der Bilder gar nicht :
Blende per Alt+F10 den Arbeitsbereich ein und verschiebe die Bilder per Pfeilsymbole in die gewünschte Reihenfolge - das ist ja nur 1x monatlich notwendig ;-)
Userbild
Alternativ könntest Du auch ein verknüpftes Bild erstellen - suche dazu mal nach "Kamerasymbol" oder "Verknüpfte Grafik" im Archiv oder bei Google.
zu 2.) gibt es zwar auch Lösungen, sind mir jetzt aber zu aufwendig zu beschreiben...
Gruß, NoNet

http://www.exceltreffen.de/index.php?page=224
Anzeige
AW: Antwort zu 1. : Manuelle Sortierung der Bilder
31.05.2012 13:47:58
dave
Hallo NoNet.
Zwar hat ALT-F10 bei mir komischerweise nicht funktioniert, aber ich habe den "Auswahlbereich" dann doch noch gefunden.
Ich denke das reicht dann für diesen Punkt so aus. Danke soweit.
Für den zweiten Teil würde es im Prinzip ausreichen, wenn ich ein neu eingefügtes Bild anschließend manuell mit einem Namen versehen kann.
Im Prinzip so:
Einfügen des neuen Bildes per STRG-V (Ereignis?)
Selektieren des neuen Bildes
Dialogbox für neuen Namen
Die technische Umsetzung hapert allerdings mit meinen VBA-Kenntnissen. Schon die Frage, welches Ereignis das Einfügen auslöst und wie ich den aktuellen Namen des eingefügten Objektes abfrage, bekomme ich nicht beantwortet.
Gruß
David
Anzeige
AW: Antwort zu 1. : Manuelle Sortierung der Bilder
02.06.2012 17:59:58
fcs
Hallo Dave,
mit dem folgenden Makro kannst du das als letztes eingefügte Grafikobjekt umbenenennen.
Selektion des Objekts ist nicht erforderlich.
Gruß
Franz
Sub Bild_Letztes_Umbenennen()
Dim objShape As Shape, objShape2 As Shape
Dim wks As Worksheet, strAuswahl As String, strMsgText As String
Set wks = ActiveSheet
With wks
If wks.Shapes.Count > 0 Then
Set objShape = wks.Shapes(.Shapes.Count)
strMsgText = "Bitte Namen des zuletzte eingefügten Bildes anpassen"
Eingabe:
strAuswahl = VBA.InputBox(strMsgText, Title:="Bild umbenennen", Default:=objShape.Name)
If strAuswahl  "" Then
For Each objShape2 In wks.Shapes
If LCase(objShape2.Name) = LCase(strAuswahl) Then
strMsgText = "Der eingegebene Name ist bereits vorhanden." & vbLf _
& "Bitte Namen des zuletzte eingefügten Bildes anpassen"
GoTo Eingabe
End If
Next
objShape.Name = strAuswahl
End If
Else
MsgBox "Keine Bilder vorhanden"
End If
End With
End Sub

Anzeige
AW: Antwort zu 1. : Manuelle Sortierung der Bilder
04.06.2012 10:45:22
dave
Hi fcs,
leider hat das nicht hingehauen. Im Blatt ist noch eine Combobox (die für die Auswahl des anzuzeigenden Bildes verwendet wird), die hat er umbenannt, aber nicht das zuletzt eingefügte Bild.
Ich kann in dem Code nicht erkennen, wie das "richtige" Objekt als solches erkannt und selektiert wird?!
Auf jeden Fall erst mal Danke, dass du dich damit beschäftigst.
Gruß
David
AW: Bild (Shape-Object) umbenennen
04.06.2012 14:12:39
fcs
Hallo David,
ein neu hinzugefügtes Bild (Shape) ist eigentlich immer das letzte Shape-Objekt in der Auflistung. Deshalb wundere ich mich, dass es nicht funktioniert. Evtl. wird die Index-Nummer der Shapes auch geändert, wenn du manuell die Reihenfolge änderst.
Mit dieser Zeile wird auf das letzte Objekt in der Shapeliste zugegriffen.
Set objShape = wks.Shapes(wks.Shapes.Count)
Ich hab noch ein wenig rumgesucht. Hier jetzt ein Variante, mit der ein selektiertes Bild (Shape-Object) umbenannt werden kann.
Gruß
Franz
'Erstellt unter Excel 2010
Sub ChangeName_of_SelectedShape()
'Selektiertes Shape-Object umbenennen
Dim objShape As Object, objShape2 As Shape
Dim strAuswahl As String, strMsgText As String, NameOld As String
On Error GoTo Fehler
Set objShape = Selection
NameOld = objShape.Name
strMsgText = "Bitte Namen des selektierten Bildes anpassen" & vbLf _
& "Aktueller Name: " & NameOld
Eingabe:
strAuswahl = VBA.InputBox(strMsgText, Title:="Bild umbenennen", Default:=NameOld)
If strAuswahl  "" Then
If LCase(strAuswahl)  LCase(NameOld) Then
For Each objShape2 In ActiveSheet.Shapes
If LCase(objShape2.Name) = LCase(strAuswahl) Then
strMsgText = "Der eingegebene Name ist bereits vorhanden." & vbLf _
& "Bitte Namen des selektierten Bildes anpassen" & vbLf _
& "Aktueller Name: " & NameOld
GoTo Eingabe
End If
Next
objShape.Name = strAuswahl
End If
End If
Fehler:
If Err.Number  0 Then
MsgBox "Fehler-Nr.: " & Err.Number & vbLf & Err.Description & vbLf _
& "Vor Start des Makros muss ein Bild-Objekt (Shape) selektiert werden!", _
vbInformation, _
"Makro - ChangeName_of_SelectedShape"
End If
End Sub

Anzeige
AW: Bild (Shape-Object) umbenennen
04.06.2012 14:38:56
dave
Hallo Franz,
das funzt jetzt prima, sogar mit Fehlerroutine!! Vielen Dank.
Normalerweise würde ich das jetzt auf eine Schalfläche zum manuellen Auslösen legen.
Kennst du eine Möglichkeit, das automatisch beim Einfügen per STRG-V ablaufen zu lassen? Ich glaube, man kann ja Tastenkombinationen "abfangen", weiß aber leider nicht wie. Oder löst das Einfügen an sich auch irgendein Ereignis aus (Worksheet_Change vielleicht?)?
Gruß
David
AW: Bild (Shape-Object) umbenennen
04.06.2012 21:26:38
fcs
Hallo David,
ein Ereignismakro beim Einfügen von Bildern in Tabellenblättern gibt es nicht.
Tasten-Ereignisse gbt z.B. für Textboxen in Userforms.
Du könntest aber nach dem Selektieren des Vorlagebildes (wenn es denn in Excel ist) den kompletten Kopier-/Positionier-/Einfüge-/Umbenennungsvorgang "makrobetreut" ausführen.
Hier eine kleine Beispieldatei mit entsprechendem Makro das nach Bildselektion per Schaltfläche gestartet wird.
https://www.herber.de/bbs/user/80429.xlsm
Gruß
Franz
Anzeige
AW: Bild (Shape-Object) umbenennen
05.06.2012 08:54:23
dave
Hi Franz,
das bringt leider nichts, da die Vorlage nicht aus Excel kommt. Da bleibt dann wohl nur, eine gute Anleitung für die "normalen" User zu schreiben.
Ich werde aber deinen Entwurf mit in mein Archiv legen, insofern war die Arbeit nicht vergebens.
Vielen Dank dafür.
Gruß
David
AW: Bild (Shape-Object) umbenennen
05.06.2012 19:08:48
fcs
Hallo David,
mit kleiner Anpassung kann man das in der Zwischenablage befindliche Bild einfügen und umbenennen.
Gruß
Franz
Sub Bild_einfuegen_umbenennen()
'Selektiertes Shape-Object umbenennen
Dim objShape As Object, objShape2 As Shape
Dim Zelle As Range
Dim strAuswahl As String, strMsgText As String, NameOld As String
On Error GoTo Fehler
Set Zelle = Application.InputBox(prompt:="Bitte Einfügezelle für kopiertes Bild wählen", _
Title:="Bild kopieren", Default:=ActiveCell.Address, Type:=8)
Application.Goto Reference:=Zelle, scroll:=False
ActiveSheet.Paste
Set objShape = Selection
objShape.Top = Zelle.Top + 1
objShape.Left = Zelle.Left + 1
NameOld = objShape.Name
strMsgText = "Bitte Namen des selektierten Bildes anpassen" & vbLf _
& "Aktueller Name: " & NameOld
Eingabe:
strAuswahl = VBA.InputBox(strMsgText, Title:="Bild umbenennen", Default:=NameOld)
If strAuswahl  "" Then
For Each objShape2 In ActiveSheet.Shapes
If LCase(objShape2.Name) = LCase(strAuswahl) Then
strMsgText = "Der eingegebene Name ist bereits vorhanden." & vbLf _
& "Bitte Namen des eingefügten Bildes anpassen" & vbLf _
& "Aktueller Name: " & NameOld
GoTo Eingabe
End If
Next
objShape.Name = strAuswahl
End If
Fehler:
If Err.Number  0 Then
If Err.Number = 424 Then
'Zellselektion wurde abgebrochen
Else
MsgBox "Fehler-Nr.: " & Err.Number & vbLf & Err.Description & vbLf _
& "Vor Start des Makros muss ein Bild kopiert werden!", _
vbInformation, _
"Makro - ChangeName_of_SelectedShape"
End If
End If
End Sub

Anzeige
AW: Bild (Shape-Object) umbenennen
06.06.2012 08:22:05
dave
Hi Franz,
Klasse, das funzt perfekt. Wieder einiges gelernt!
Tausend Dank.
Gruß
David

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige