Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ActiveSheet.Image1.Picture = .....

Forumthread: ActiveSheet.Image1.Picture = .....

ActiveSheet.Image1.Picture = .....
23.04.2009 17:00:17
Frank
Liebes Forum ich hab da mal ein Problem
In meinem Tabellenblatt sind mehrere Images direkt ohne Userform eingebettet. ( kann sein, über 100 )
Nun möchte ich zu bestimmter Zeit bestimmte Bilder ändern.
Der Befehl "ActiveSheet.Image1.Picture = ActiveSheet.Image2.Picture" funktioniert einwandfrei.
Nun soll aber die Auswahl ( Image1 oder Image32 ... ) vom Code generiert werden.
Der Versuch die Images über ihren Namen oder ihren Index anzusprechen schlägt fehl.
Activesheet.OLEObjects("Image1").Picture = Activesheet.Image2.Picture
Activesheet.Shapes("Image1").Picture = Activesheet.Image2.Picture
Activesheet.OLEObjects(1).Picture = Activesheet.Image2.Picture
Activesheet.Shapes(1).Picture = Activesheet.Image2.Picture
keiner dieser Zeilen funktioniert (Objekt unterstützt diese Eigenschaft oder Methode nicht)
Das zu ändernde Image hat definitiv den Index 1
Activesheet.Shapes(1).Select beweist das.
Wie kann ich dem Image ein anderes Bild zuordnen, ohne den Wortlaut "Activesheet.Image1.Picture ....." zu verwenden ?
Danke im Voraus
Frank
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveSheet.Image1.Picture = .....
23.04.2009 18:43:03
Nepumuk
Hallo Frank,
so:
Tabelle1.OLEObjects("Image1").Object.Picture = ....
Gruß
Nepumuk
AW: ActiveSheet.Image1.Picture = .....
24.04.2009 15:36:07
Frank
Hi Nepomuk
Super, das funktioniert einwandfrei !!!
Da wär ich im Leben nicht drauf gekommen .
Du bist mein Held !
Gruß an alle
AW: ActiveSheet.Image1.Picture = .....
24.04.2009 15:47:49
Frank
Hi Nepomuk zum 2.
Weil das so super funktioniert hat, trau ich mich gleich noch 'ne Frage zu stellen.
Wie muß der Befehl lauten um Bilder zu ändern, die mit "Activesheet.Pictures.Insert(......)" erstellt wurden ?
Gruß Frank
Anzeige
AW: ActiveSheet.Image1.Picture = .....
24.04.2009 17:46:49
Nepumuk
Hallo Frank,
wie ändern, Größe / Position / Name .....?
Gruß
Nepumuk
AW: ActiveSheet.Image1.Picture = .....
24.04.2009 18:09:56
Frank
na vorhandenes bild weg, neues bild hin....(exakt an selbe stelle)
aber hat nicht aus einer datei, sondern kopie von bild auf anderem blatt
gruss frank
AW: ActiveSheet.Image1.Picture = .....
24.04.2009 20:07:04
Nepumuk
Hallo Frank,
alle Shapes in der Tabelle abklappern, wenn es ein Bild ist, Position merken und löschen. Dann anderes Bild kopieren, in die entsprechende Tabelle einfügen und positionieren. Dürften rund 10 Zeilen Programm sein.
Mehr kann ich dir nicht sagen, da du z.B. verheimlichst, wo sich die anderen Bilder befinden und wie sie angesprochen werden können.
Gruß
Nepumuk
Anzeige
AW: ActiveSheet.Image1.Picture = .....
25.04.2009 09:55:46
Frank
Hi Nepomuk
So..., dann holen wir mal ein bißchen weiter aus... *lol*
Ich versuche mich daran, den Windows-Explorer als Excel-Tabelle nachzubauen.
(aber nicht nur Größe, Änderungsdatum usw sondern auch die korrekten Symbole)
Sicher, es klingt unsinnig, das Fahrrad noch einmal zu erfinden, aber mein Ziel ist es, an einem konkreten Projekt meine VBA-Kenntnisse zu verbessern.
Meine Idee ist folgende:
Beim Programmstart werden alle Ordner der Ebene0 (C:\, D:\, E:\, ...) und alle Ordner der Ebene1 (C:\Programme, C:\System, C:\Spiele ...) in ein verstecktes Tabellenblatt eingelesen.
Auf dem Activesheet wird nur die Ebene0 angezeigt.
Wenn ich jetzt auf das (+) neben C:\ klicke :
- werden soviele Leerzeilen eingefügt, wie Ordner der Ebene1 vorhanden sind
- die Ordner der Ebene1 eingetragen
- die Symbole der Ordner aus dem versteckten blatt in das Activesheet kopiert
wenn jetzt auf das (-) neben C:\ geklickt wird, werden die entsprechenden Zeilen (mitsamt Bildern) vom Activesheet gelöscht, stehen aber auf dem verstecktem Blatt immer noch zur Verfügung zum schnellen Kopieren ohne neues Einlesen
wenn jetzt die Symbole im versteckten blatt als Image vorhanden sind, ist es recht aufwendig die Kopie auf dem Activesheet an die richtige Position zu bringen.
als Image schwebt das Bild ja praktisch über den Zellen
mit Picture.Insert wäre das Bild einer bestimmten Zelle zugeordnet, und würde beim kopieren dieser Zelle mitkopiert werden
PS das scheint mir noch wichtig:
Die Symbole werden mit einer komplizierten Routine ausgelesen, die ich nicht so richtig durchschaue.
Am Ende steht mir eine Zahl (Handle) zur Verfügung, die ich der Picture-Eigenschaft des Image-Objekts zuweisen kann. Ob das bei Picture.Insert auch funktioniert, bleibt zu klären.
ActiveSheet.OLEObjects(BildNr).Object.Picture = Handle_vom_Symbol das funktioniet
Wie muss der Befehl lauten, wenn das Bild mit Picture.Insert erstell wurde ?
Schon mal vielen Dank für deine Mühe
Gruß Frank
(ICQ 463165142)
Anzeige
;
Anzeige

Infobox / Tutorial

Bilder in Excel VBA verwalten und ändern


Schritt-für-Schritt-Anleitung

Um Bilder in einem Excel-Arbeitsblatt mithilfe von VBA zu ändern, kannst du die folgenden Schritte befolgen:

  1. Bildelement identifizieren: Bestimme den Namen oder die Indexnummer des Bildes, das du ändern möchtest. Zum Beispiel:

    Dim imgName As String
    imgName = "Image1"
  2. Bild ändern: Verwende den folgenden VBA-Code, um das Bild zu ändern. Hierbei wird das Bild als OLE-Objekt angesprochen:

    ActiveSheet.OLEObjects(imgName).Object.Picture = ActiveSheet.OLEObjects("Image2").Object.Picture
  3. Bilder über Pictures.Insert verwalten: Wenn du ein Bild mit ActiveSheet.Pictures.Insert eingefügt hast, kannst du es wie folgt ändern:

    Dim newImage As Picture
    Set newImage = ActiveSheet.Pictures.Insert("C:\Path\To\Your\Image.jpg")
    newImage.Top = ActiveSheet.Shapes(imgName).Top
    newImage.Left = ActiveSheet.Shapes(imgName).Left

Häufige Fehler und Lösungen

  • Fehler: "Objekt unterstützt diese Eigenschaft oder Methode nicht"
    Dieser Fehler tritt auf, wenn das Bild nicht korrekt angesprochen wird. Stelle sicher, dass der Name oder der Index des Bildes korrekt ist. Verwende ActiveSheet.Shapes("Image1").Select, um zu überprüfen, ob das Bild existiert.

  • Fehler beim Einfügen von Bildern
    Wenn du versuchst, ein Bild mit ActiveSheet.Pictures.Insert zu ändern, aber das Bild nicht angezeigt wird, überprüfe den Pfad zur Bilddatei. Der Pfad sollte korrekt und die Datei vorhanden sein.


Alternative Methoden

Falls du die Bilder nicht über OLE-Objekte oder Pictures.Insert verwalten möchtest, kannst du auch die Shapes-Sammlung verwenden:

Dim shp As Shape
Set shp = ActiveSheet.Shapes("Image1")
shp.Fill.UserPicture "C:\Path\To\Your\Image.jpg"

Diese Methode ist besonders nützlich, wenn du Bilder aus einer Datei direkt in ein Shape einfügen möchtest.


Praktische Beispiele

  1. Bilder in einer Schleife ändern: Wenn du mehrere Bilder in einem Arbeitsblatt hast und diese basierend auf einer Bedingung ändern möchtest, kannst du Folgendes verwenden:

    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
       If shp.Type = msoPicture Then
           shp.Fill.UserPicture "C:\Path\To\NewImage.jpg"
       End If
    Next shp
  2. Bild an eine bestimmte Zelle anpassen: Wenn du Bilder in Zellen platzieren möchtest, kannst du die Position anpassen:

    Dim cell As Range
    Set cell = ActiveSheet.Range("A1")
    Set newImage = ActiveSheet.Pictures.Insert("C:\Path\To\Your\Image.jpg")
    newImage.Top = cell.Top
    newImage.Left = cell.Left

Tipps für Profis

  • Verwende Picture Handles: Wenn du mit Bild-Handles arbeitest, stelle sicher, dass du den Handle korrekt zuweist. Das kann helfen, Bilder effizienter zu verwalten.

  • Optimierung der Leistung: Wenn du viele Bilder auf einmal ändern oder einfügen musst, könnte es sinnvoll sein, die Bildschirmaktualisierung zu deaktivieren, um die Leistung zu verbessern:

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich ein Bild aus einem anderen Arbeitsblatt kopieren?
Du kannst das Bild mit ActiveSheet.Pictures("Bildname").Copy kopieren und dann in das Zielarbeitsblatt einfügen.

2. Was mache ich, wenn das Bild nicht angezeigt wird?
Überprüfe die Sichtbarkeit des Bildes und stelle sicher, dass das Bild nicht hinter anderen Objekten verborgen ist. Verwende shp.ZOrder msoSendToBack, um das Bild in den Hintergrund zu verschieben.

3. Kann ich auch Bilder aus einer URL einfügen?
Ja, du kannst Bilder aus einer URL einfügen, allerdings erfordert dies zusätzliche Schritte zur Verarbeitung des Downloads. Verwende dazu die XMLHTTP-Objekte in VBA.

4. Wie kann ich die Größe eines Bildes ändern?
Ändere die Eigenschaften Width und Height des Shape-Objekts:

shp.Width = 100
shp.Height = 100

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige