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

per VBA Bild laden

Forumthread: per VBA Bild laden

per VBA Bild laden
amintire
Guten morgen alle zusammen,
gibt es eine Möglichkeit per VBA Code ein Bild aus der Festplatte in Excel zu laden?
In Zelle A1 steht z.B. der Name der Bilddatei, die Bilder sind z.B. im Laufwerk C untergebracht.
Wenn in Zelle A1 der Name der Bilddatei reingeschrieben wird, erscheint dann das Bild in Excel.
Die Bilder sind entweder .jpg oder .bmp Dateien (die Bezeichnung .jpg / .bmp werden in Zelle A1 nicht mit dazugeschrieben, sondern nur der Name)
Vielen Dank für Eure Hilfe und Lösungsvorschläge.
Lieben Gruß
Amina
Anzeige
AW: per VBA Bild laden / anpassung ?
22.12.2010 07:09:38
amintire
Hallo Hajo,
ich habe mich für diese Variante im Code entschieden, aber wie kann ich am besten diesen Makro "BildAnpassen" in deinem Code einfügen bzw. anpassen?
Sub BildAnpassen()
'aufgezeichnet von Zehra Agic 16.07.2010
With ActiveSheet.Shapes(2)
.LockAspectRatio = msoFalse
.Left = [D2].Left
.Top = [D2].Top
.Width = [D2:N2].Width
.Height = [D2].Height
End With
End Sub
Option Explicit ' Variablendefinition erforderlich
Private Sub Worksheet_Change(ByVal Target As Range)
Dim StOrdner As String                  ' Variable Ordner Bildablage
Dim StBild As String                    ' Variable Bildname
Dim InI As Integer                      ' Variable Schleifenzähler
Dim RaBereich As Range                  ' Variable Bereich der Gültigkeit
Dim RaZelle As Range                    ' Variable bearbeitete Zelle
Dim LoBreite As Long                    ' Variable Bildbreite
Dim LoHoehe As Long                     ' Variable Bildhöhe
' Ordner Bildablage
StOrdner = ThisWorkbook.Path & "\de-Bilder\"
Set RaBereich = Range("A3")       ' Bereich der Wirksamkeit
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then        ' falls nicht gefunden wird sub verlassen
For Each RaZelle In RaBereich           ' Schleife über alle veränderten Zellen
' Reaktion auf Zellveränderung abschalten
Application.EnableEvents = False
RaZelle.Offset(0, 1) = ""           ' Inhalt der Zelle neben Bildnamen löschen
' Reaktion auf Zellveränderung einschalten
Application.EnableEvents = True
' Bildname erstellen
StBild = "Bild " & RaZelle.Address(False, False)
' altes Bild löschen von jinx
For InI = ActiveSheet.Shapes.Count To 1 Step -1
If ActiveSheet.Shapes(InI).Name = StBild Then
ActiveSheet.Shapes(InI).Delete
Exit For
End If
Next
If RaZelle.Value  "" Then         ' eine Eingabe ist vorhanden
' Bildname einschl. Ordner erstellen
StBild = StOrdner & Format(RaZelle.Value, "00000") & ".jpg"
If Dir(StBild) = "" Then        ' Prüfung ob Bild vorhanden
' Reaktion auf Zellveränderung abschalten
Application.EnableEvents = False
' Bild nicht vorhanden
Target.Offset(0, 1) = "kein Bild vorhanden!"
' Reaktion auf Zellverändeung einschalten
Application.EnableEvents = True
Else                            ' Bild vorhanden
' Bildgröße und Bild bei Position einfügen
Select Case Target.Address(False, False)
Case "A3"
LoBreite = 60
LoHoehe = 60
' einfügen ohne select von  Bert Körn
' Ausdruck.AddPicture(FileName, Verknüpfung,
' in Mappe speichern,
' Pos. Links, Pos. Oben, Breite, Höhe)
' von Klausimausi64 Bildname
' erstes Offset Pos. Links 0 Zeilen und
' eine Spalte nach rechts
' zweites Offset Pos. Oben 0 Zeilen tiefer
' und 0 Spalten nach rechts
ActiveSheet.Shapes.AddPicture(StBild, True, True, _
RaZelle.Offset(0, 0).Left, _
RaZelle.Offset(5, 0).Top, LoBreite, _
LoHoehe).Name = "Bild " _
& RaZelle.Address(False, False)
End Select
End If
End If
Next RaZelle
End If
Set RaBereich = Nothing                 ' Variable leeren
End Sub

Lieben Gruß
Amina
(Frohe Weihnachten...)
Anzeige
Bei AddPicture muss das rein und zwar...
26.12.2010 04:49:21
Luc:-?
…entspräche hier RAZelle ohne Offset deinem [D2] und die Variablen LoBreite bzw LoHoehe deinem [D2:N2].Width bzw [D2].Height. Das kannst du aber auch nachlesen…!
FroWeihn+GRutsch!
Gruß Luc :-?
AW: so`?
26.12.2010 12:14:23
amintire
Hallo Luc,
vielen Dank für deine Antwort,
wo kann ich es denn nachlesen?
Stimmt der Code dann so? Komme ich deiner Beschreibung hin?
Habe ehrlich nicht soviel Ahnung von VBA
ActiveSheet.Shapes.AddPicture(StBild, True, True, _
RaZelle.Left = [D2].Left
RaZelle.Top = [D2].Top
RaZelle.Width = [D2:N2].Width
RAZelle.Height = [D2].Height
& RaZelle.Address(False, False)
Lieben Gruß
Amina
Anzeige
Nein, denn da kommt nur 0 oder 1 raus,...
27.12.2010 04:49:06
Luc:-?
…Amina!
AddPicture ist eine Methode der Shapes-Objektliste. Du solltest dich mal mit dem xlVBA-Objektmodell beschäftigen, wenn du VBA wirklich lernen willst. Da wäre für den Anfang die VBE(ditor)-Hilfe recht nützlich, denn da wdn auch die Parameter dieser Methode erklärt. Left:=RAZelle.Left ist ein solcher und bedeutet, dass der Abstand des Objektes vom linken TabRand dem Abstand von RAZelle von diesem entspricht. Bei dir soll das aber der Abstand von [D2]Range("D2") sein. Also müsstest du entweder RAZelle=Range("D2") setzen oder RAZelle durch [D2] ersetzen. Für Width und Height stehen bei Hajo extra Variablen, denen du zuvor die entsprechenden Werte (so wie du es hier mit RAZelle machen wolltest) zuweisen musst. Alternativ kannst du natürlich alles so schreiben wie du hier zeigst, aber jeweils alles vor und mit = weglassen. Gleiches gälte auch für .Address, aber das kommt mir hier durch den Anschluss mit & an Height, noch dazu in eigener Zeile (!), sehr sinnlos vor (Syntaxfehler!).
Hajo erwartet, dass man seine VBA-Vorschläge versteht und selbständig erforderliche Anpassungen vornehmen kann. Das ist auch insofern gerecht­fertigt, indem niemand, der VBA anwenden will, erwarten kann, dass man ihm ein Komplett-Pgm für seinen speziellen Fall schreibt. Das kommt hier zwar häufig vor, sollte aber die Ausnahme sein. Denn unverstandene Pgmm einzusetzen ist ggf nicht nur gefährlich, sondern macht auch abhängig. Eine Dauerlösung kann das also nicht sein!
Ein guter Forumsbeitrag sollte also in 1.Linie Hilfe zur Selbsthilfe leisten, ggf auch den VBA-Einstieg für Anfänger erleichtern, mehr aber nicht unbedingt. Letztendlich muss ja auch der Frager für den Code geradestehen, nicht der Antworter. Bitte, bedenke das!
Fazit: Man kann/darf nur machen, was man auch kann/versteht. Wissen, wo's steht bzw stehen könnte, ist auch das Mindeste, was man wissen muss/sollte.
Gruß Luc :-?
Anzeige
AW: habe eine andere Lösung... gut so? ;)
27.12.2010 07:51:21
amintire
Hallo Luc,
ich würde es ja verstehen wenn du nicht so kompliziert schreiben bzw. erklären würdest.
Mache nebenbei Studium als Fachinformatiker Anwendungsentwicklung, und da ist VBA auch dabei, einwenig kompliziert aber interessant.
Und weil ich nicht so richtig verstanden habe, was du jetzt nun gemeint hast, habe ich folgenden Code so zusammengeschmelzt, und funktioniert auch wunderbar. Ist bestimmt nicht die allerbeste Lösung aber es funktioniert ;)
' Bildgröße und Bild bei Position einfügen
Select Case Target.Address(False, False)
Case "M7"
LoBreite = 60
LoHoehe = 60
' einfügen ohne select von Bert Körn
' Ausdruck.AddPicture(FileName, Verknüpfung,
' in Mappe speichern,
' Pos. Links, Pos. Oben, Breite, Höhe)
' von Klausimausi64 Bildname
' erstes Offset Pos. Links 0 Zeilen und
' eine Spalte nach rechts
' zweites Offset Pos. Oben 0 Zeilen tiefer
' und 0 Spalten nach rechts
ActiveSheet.Shapes.AddPicture(StBild, True, True, _
RaZelle.Offset(0, 0).Left, _
RaZelle.Offset(5, 0).Top, LoBreite, _
LoHoehe).Name = "Bild " _
& RaZelle.Address(False, False)
' ********
With ActiveSheet.Shapes(7)
.LockAspectRatio = msoFalse
.Left = [D2].Left
.Top = [D2].Top
.Width = [D2:N2].Width
.Height = [D2].Height
End With
Lieben Gruß und vielen Dank
für deine komplizierten Antworten ;)
Amina
Anzeige
Kompliziert oder nicht, das ist keine Frage,
27.12.2010 17:56:53
Luc:-?
…Amina,
aber als angehende/r Fachinformatiker/in solltest du das gewohnt sein… ;-)
Studenten sollten immer wissen, wo was steht (wer, wenn nicht sie)!
Wenn's fktt isset ja ok und natürl kann man den Bildstandort auch noch nachträgl korrigieren, so wie du das hier gemacht hast. Natürl ist dann im Originalcode Überflüssiges enthalten. Kannst du ja dann mal später, wenn du alles verstehst, korrigieren.
Übrigens, hätte ich gewusst, was du (nebenbei) studierst, hätte ich mehr vorausgesetzt, denn so manches ist bei (fast) allen Pgmiersprachen ähnlich bis gleich. Also, Ahnungslosigkeit gilt in Zukunft nicht mehr…! ;-)>
Gruß + GRutsch!
Luc :-?
Anzeige
OT: Hast du's nun geschafft? FroWeihn! owT
22.12.2010 11:54:40
Luc:-?
:-?
AW: per VBA Bild laden
22.12.2010 12:18:54
amintire
Hallo Luc,
hallo Hajo,
das Bild habe ich geschaft per VBA Code in Excel zu laden,
aber die Anpassung müsste noch gemacht werden und ich weiß nicht so genau wie.
Der Code sieht wie folgt aus und müsste in dem Code von Hajo angepasst werden.
Irgendeinen Vorschlag ?
Sub BildAnpassen()
'aufgezeichnet von Zehra Agic 16.07.2010
With ActiveSheet.Shapes(2)
.LockAspectRatio = msoFalse
.Left = [D2].Left
.Top = [D2].Top
.Width = [D2:N2].Width
.Height = [D2].Height
End With
End Sub

Gruß Amina
Anzeige
Ich meinte den anderen Thread (im Archiv)! owT
22.12.2010 12:44:17
Luc:-?
:-?
AW: Ich meinte den anderen Thread (im Archiv)! owT
22.12.2010 13:52:59
amintire
Achsoooooo Luc, ne nicht wirklich, werde mich aber die nächsten Tagen hinsetzen und ausprobieren und testen. ;)
Kannst du evtl. bei diesem Code helfen mit dem Bild anpassen?
Gruß Amina
(Frohe Weihnachten)
;
Anzeige

Infobox / Tutorial

Bilder per VBA in Excel laden und anpassen


Schritt-für-Schritt-Anleitung

Um ein Bild per VBA in Excel zu laden, kannst du den folgenden Code verwenden. Dieser Code nimmt den Dateinamen aus Zelle A1 und fügt das Bild in die aktive Excel-Tabelle ein. Die Bilder sollten sich im Verzeichnis C:\de-Bilder\ befinden und die Dateiendung wird nicht in der Zelle angegeben.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu (Einfügen > Modul) und kopiere den folgenden Code hinein:
Option Explicit  ' Variablendefinition erforderlich

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim StOrdner As String                  ' Variable Ordner Bildablage
    Dim StBild As String                    ' Variable Bildname
    Dim InI As Integer                      ' Variable Schleifenzähler
    Dim RaBereich As Range                  ' Variable Bereich der Gültigkeit
    Dim RaZelle As Range                    ' Variable bearbeitete Zelle
    Dim LoBreite As Long                    ' Variable Bildbreite
    Dim LoHoehe As Long                     ' Variable Bildhöhe

    ' Ordner Bildablage
    StOrdner = "C:\de-Bilder\"
    Set RaBereich = Range("A1")            ' Bereich der Wirksamkeit

    If Not Intersect(RaBereich, Range(Target.Address)) Is Nothing Then
        For Each RaZelle In RaBereich
            Application.EnableEvents = False
            ' Bildname erstellen
            StBild = StOrdner & RaZelle.Value & ".jpg" ' oder ".bmp"

            ' altes Bild löschen
            For InI = ActiveSheet.Shapes.Count To 1 Step -1
                If ActiveSheet.Shapes(InI).Name = RaZelle.Value Then
                    ActiveSheet.Shapes(InI).Delete
                    Exit For
                End If
            Next

            If RaZelle.Value <> "" Then
                ' Bild einfügen
                ActiveSheet.Shapes.AddPicture StBild, msoFalse, True, _
                RaZelle.Left, RaZelle.Top, 100, 100  ' Breite und Höhe anpassen
            End If
            Application.EnableEvents = True
        Next RaZelle
    End If
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Gib in Zelle A1 den Namen des Bildes ohne Dateiendung ein und das Bild wird automatisch geladen.

Häufige Fehler und Lösungen

  • Fehler: "kein Bild vorhanden!"

    • Lösung: Überprüfe, ob der Bildname in Zelle A1 korrekt ist und ob das Bild im angegebenen Verzeichnis vorhanden ist.
  • Fehler: Bild wird nicht angezeigt

    • Lösung: Stelle sicher, dass die Dateiendung (z.B. .jpg oder .bmp) korrekt in der VBA-Logik angegeben ist.

Alternative Methoden

Eine Alternative zur Verwendung von VBA ist der Einsatz von Excel-Funktionen oder Add-Ins, die Bildreferenzen unterstützen. Dies kann jedoch weniger flexibel sein, insbesondere wenn du viele Bilder verwalten möchtest.


Praktische Beispiele

Wenn du ein Bild mit festgelegten Abmessungen einfügen möchtest, kannst du die Variablen LoBreite und LoHoehe wie folgt anpassen:

LoBreite = 80 ' Breite des Bildes
LoHoehe = 80  ' Höhe des Bildes

Füge diese Variablen in die AddPicture-Methode ein, um die Größe des Bildes zu steuern.


Tipps für Profis

  • Nutze die .LockAspectRatio = msoFalse Methode, um sicherzustellen, dass das Bild nicht verzerrt wird, wenn du die Größe anpasst.
  • Experimentiere mit der Positionierung der Bilder, indem du die Left und Top Parameter in der AddPicture-Methode anpasst.
  • Erstelle eine Fehlerbehandlung, um unerwartete Probleme beim Laden der Bilder zu vermeiden.

FAQ: Häufige Fragen

1. Frage Wie kann ich den VBA-Code anpassen, um Bilder in einem anderen Ordner zu laden?
Antwort: Ändere einfach die Variable StOrdner auf den gewünschten Pfad.

2. Frage Kann ich Bilder in verschiedenen Formaten laden?
Antwort: Ja, passe den Dateinamen in der AddPicture-Methode an, um verschiedene Formate wie .bmp, .png oder .gif zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige