Anzeige
Archiv - Navigation
1820to1824
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
Bild über VBA in einer Zelle einfügen
17.03.2021 12:55:13
Christian
Hallo zusammen,
ich habe bereits vergeblich nach Lösungen zu meinem Problem gesucht.
Vielleicht kann mir hier einer weiterhelfen oder sogar ein Beispiel von einem VBA-Code erstellen.
Ich will gerne über eine Zelle (Bsp. B2, soll aber über alle Zellen in B möglich separat funktionieren) auf meiner Festplatte zugreifen, wo ich ein Bild auswählen kann. Das Bild soll dann in der ausgewählten Zelle dargestellt werden.
Des weiteren soll das eingefügte Bild sich an der Zellengröße anpassen.
Gibt es hierfür ein Makro bzw. ist das Möglich?
Vielen Dank im Voraus für die Hilfe

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild über VBA in einer Zelle einfügen
17.03.2021 13:24:01
volti
Hallo Christian,
probiere mal diese Idee hier aus und passe sie ggf. an Deine Bedürfnisse an:
Code:

[Cc]

Sub Bild_einfügen_und_Anpassen_aus_Datei() ' Fügt ein Bild aus einer Datei ein und passt es an ' Eingefügt an selektierter Stelle, Höhe/Breite bleibt Dim sPicFile As Variant, oPic As Shape sPicFile = Application.GetOpenFilename _ ("Pictures (*.gif; *.jpg; *.bmp; *.tif; *.jxr), *.gif; *.jpg; *.bmp; *.tif; *.jxr", _ , "Bild auswählen") If sPicFile <> "" Then Set oPic = ActiveSheet.Shapes.AddPicture(Filename:=sPicFile, _ LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _ Left:=Selection.Left, Top:=Selection.Top, Width:=-1, Height:=-1) With oPic .LockAspectRatio = msoTrue .Height = .TopLeftCell.Height ' Höhe der Bild-Zelle .Placement = xlMoveAndSize End With Set oPic = Nothing End If End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz


Anzeige
AW: Bild über VBA in einer Zelle einfügen
17.03.2021 13:32:15
volti
Hallo Christian,
hier noch eine Variante, die sich nicht nur der Höhe anpasst, sondern je nach Bildformat Hoch/Quer...
Code:

[Cc][+][-]

Sub Bild_Einfuegen_und_Anpassen_aus_Datei2() ' Sub fügt ein Bild in eine Zelle/Bereich ein ' Eingefügt an selektierter Stelle, Höhe/Breite werden angepasst Dim AC As Range, oPic As Object Dim sPicFile As String sPicFile = Application.GetOpenFilename _ ("Pictures (*.gif; *.jpg; *.bmp; *.tif; *.jxr), *.gif; *.jpg; *.bmp; *.tif; *.jxr", _ , "Bild auswählen") ' Bereich setzen, auch verbundene Zellen oder Range Set AC = ActiveCell.MergeArea 'Range("B5:R17") ' Bild einfügen in linke obere Ecke, Originalgröße Set oPic = ActiveSheet.Shapes.AddPicture(sPicFile, _ False, True, AC.Left + 1, AC.Top + 1, -1, -1) If Not oPic Is Nothing Then If oPic.Width > oPic.Height Then ' Querformat oPic.Width = AC.Width - 2 If oPic.Height > AC.Height Then oPic.Height = AC.Height - 2 Else oPic.Height = AC.Height - 2 ' Hochformat If oPic.Width > AC.Width Then oPic.Width = AC.Width - 2 End If Set oPic = Nothing End If End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz


Anzeige
AW: Bild über VBA in einer Zelle einfügen
17.03.2021 14:27:37
Christian
Hallo Karl-Heinz,
super, vielen Dank für die schnelle Hilfe. Es funktioniert super.
Aber eine Frage hab ich noch.:)
Bei der ersten Variante ist das Gute, wenn die Zellenhöhe vergrößert wird, wird auch das Bild größer (in die Länge gezogen).
Besteht die Möglichkeit das es sich auch in der Breite anpasst, ohne das es sich verzerrt ?

AW: Bild über VBA in einer Zelle einfügen
17.03.2021 15:51:29
volti
Hallo Cristian,
ob sich ein Bild "verzerren" darf oder nicht, wird hiermit eingestellt.
.LockAspectRatio = msoTrue
Guck hier
viele Grüße
Karl-Heinz

Anzeige
AW: Bild über VBA in einer Zelle einfügen
18.03.2021 08:42:18
Christian
Guten Morgen Karl-Heinz,
erstmal vielen Dank für deine Arbeit.
Leider verstehe ich das nicht so richtig, bin ein Anfänger bei VBA.:)
Den Link kann ich leider auch nicht abrufen.
Ich hab hier aber im Forum weiter recherchiert und bin auf
"https://www.herber.de/mailing/Bild_bei_Klick_vergroessern_und_zuruecksetzen.htm" gestoßen.
Das wäre sogar die Ideallösung für mich. Leider funktioniert die nicht und ich müsste das Makro bei jedem Bild separat hinzufügen. Wäre das auch möglich in der Kombination mit deinem Code "Bild_einfügen_und_Anpassen_aus_Datei".
Eine weitere Frage ist. Ich will nur in bestimmten Spalten ein Bild in der Zelle einfügen. (Bsp: D:F).
Wäre super, wenn du mir weiterhelgen könntest. :)
Danke
Viele Grüße
Christian

Anzeige
AW: Bild über VBA in einer Zelle einfügen
18.03.2021 12:49:04
volti
Hallo Christian,
seit einiger Zeit kann man die Links nur noch per Rechtsclick "Im neuen Tab öffnen" aufrufen.
Wenn Du das Vergrößern-Makro nutzen möchtest, brauchst Du das nur einmal in einem normalen Modul vorhalten.
Für jedes gewünschte Bild ordnest Du per Rechtsklick immer das gleiche Makro zu.
Über die Application.Caller Funktion wird das entsprechende Bild erkannt.
Allerdings funktioniert das dort angebene Makro wohl nur, wenn im darunterliegenden Feld Angaben zur Größe gemacht werden.
Hier eine Alternative von mir:
Code:

[Cc]

Sub Grafik_GrossKlein() ' Funktion vergrößert das Bild auf dem Arbeitsbereich Dim vArr As Variant Const Faktor As Single = 1.6 ' Vergößerungsfaktor With ActiveSheet.Shapes(Application.Caller) ' Name der Grafik If .AlternativeText = "" Then .AlternativeText = .Left & ";" & .Top & ";" & .WIDTH & ";" & .HEIGHT .ScaleWidth Faktor, msoFalse .ScaleHeight Faktor, msoFalse .ZOrder msoBringToFront ' In den Vordergrund Else vArr = Split(.AlternativeText, ";") .Left = vArr(0): .Top = vArr(1) ' Bildposition wiederherstelllen .WIDTH = vArr(2): .HEIGHT = vArr(3) .AlternativeText = "" End If End With End Sub

Bitte bedenken, dass diese Vergrößerungsmakros auf bereits vorhandene Bilder angewendet werden. Eine Kombination mit meinem Erstcode, bei dem ja die Bilder erst ausgesucht und eingefügt werden, ist m.E. nicht sinnvoll.
Und noch mal zu den Einfügemakros. Eine Verzerrung des Bildes erfolgt mit keinem der Makros.
In der ersten Version wird nur auf die Höhe einer Zelle angepasst, die Breite geht evtl. über die Zelle hinaus.
In der zweiten Version wird das Bild auf jeden Fall unverzerrt in das Feld eingepasst.
Du meinst wahrscheinlich, dass bei einer nachträglichen Veränderung der Zeilenhöhe das Bild verzerrt wird. Dazu habe ich keine Kenntnis, ob und wie dann die Breite mit angepasst werden kann.
Viele Grüße
Karl-Heinz

Anzeige
AW: Bild über VBA in einer Zelle einfügen
19.03.2021 09:19:31
Christian
Hallo Karl-Heinz,
ich komme mein Ziel näher. wie ich es gerne haben möchte:). Danke erstmal bis hierin.
Es gibt jetzt nur noch ein Problem.

Sub Bild_Einfuegen_und_Anpassen_aus_Datei()
' Sub fügt ein Bild in eine Zelle/Bereich ein
' Eingefügt an selektierter Stelle, Höhe/Breite werden angepasst
Dim AC As Range, oPic As Object
Dim sPicFile As String
sPicFile = Application.GetOpenFilename _
("Pictures (*.gif; *.jpg; *.bmp; *.tif; *.jxr), *.gif; *.jpg; *.bmp; *.tif; *.jxr", _
, "Bild auswählen")
' Bereich setzen, auch verbundene Zellen oder Range
Set AC = ActiveCell.MergeArea             'Range("B5:R17")
' Bild einfügen in linke obere Ecke, Originalgröße
Set oPic = ActiveSheet.Shapes.AddPicture(sPicFile, _
False, True, AC.Left + 1, AC.Top + 1, -1, -1)
If Not oPic Is Nothing Then
If oPic.Width > oPic.Height Then       ' Querformat
oPic.Width = AC.Width - 2
If oPic.Height > AC.Height Then oPic.Height = AC.Height - 2
Else
oPic.Height = AC.Height - 2         ' Hochformat
If oPic.Width > AC.Width Then oPic.Width = AC.Width - 2
End If
Set oPic = Nothing
End If
End Sub
__________________________________
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("H2:J50")) Is Nothing Then Call  _
Bild_Einfuegen_und_Anpassen_aus_Datei
End Sub
Das ist dein Code mit der Kombination, wenn ich eine Zelle mit Doppelklick ausführe, soll das Bild in der gleichen Zelle eingefügt werden.
Das klappt soweit so gut, in der ersten Zelle. In jeder weiteren Zelle wird das Bild, anstatt in der ausgewählten Zelle, oben links eingefügt.
Was muss ich ändern, das es in der ausgewählten Zelle eingefügt wird?
Viele Grüße
Christian

Anzeige
AW: Bild über VBA in einer Zelle einfügen
19.03.2021 15:04:40
volti
Hallo Christian,
ganz folgen kann ich (noch) nicht.
Mit diesem Code hier wird die Zielzelle gesetzt, oder auch ein verbundener Zielbereich.
Set AC = ActiveCell.MergeArea
Das entspricht doch der aktuell selektierten Zelle?!
Und was genau ist jede weitere Zelle?
Vielleicht wäre eine kleine Musterdatei nicht schlecht.
viele Grüße
Karl-Heinz

AW: Bild über VBA in einer Zelle einfügen
22.03.2021 07:22:39
Christian
Guten Morgen Karl-Heinz,
anbei ist ein Beispiel.
https://www.herber.de/bbs/user/145004.xlsm
In den vorgegebenen Zeilen soll bzw. kann durch ein Doppelklick ein Bild in die entsprechende Zelle eingefügt werden.
Wenn ich dies Ausführe, wird das Bild nicht in der Zelle eingefügt, in der ich den Doppelklick ausgeführt habe, sondern oben links in das Tabellenblatt.
Viele Grüße Christian
PS: falls du hierfür eine Lösung hast, bitte den Code hier einfügen, weil der Download bei mir in der Firma blockiert ist.
Danke:)

Anzeige
AW: Bild über VBA in einer Zelle einfügen
22.03.2021 08:27:09
volti
Hallo Christian,
bei größeren Bildern (höher als der Bildschirm) wird bei Deiner Datei (warum auch immer) die Y-Position nicht angepasst.
Ich habe die Positionierung jetzt noch mal nach der Verkleinerung wiederholt. Dann geht es.
In meinen anderen Dateien klappt die Positionierung auch vor der Verkleinerung.
Hier noch mal ein überarbeitetes Makro:
Code:

[Cc][+][-]

Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("D2:F10")) Is Nothing Then Call Bild_Einfuegen_und_Anpassen_aus_Datei(Target) Cancel = True End If End Sub Sub Bild_Einfuegen_und_Anpassen_aus_Datei(Target As Range) ' Sub fügt ein Bild in eine Zelle/Bereich ein ' Eingefügt an selektierter Stelle, Höhe/Breite werden angepasst Dim oPic As Object Dim sPicFile As String sPicFile = Application.GetOpenFilename _ ("Pictures (*.gif; *.jpg; *.bmp; *.tif; *.jxr), *.gif; *.jpg; *.bmp; *.tif; *.jxr", _ , "Bild auswählen") If sPicFile = "Falsch" Then Exit Sub ' Bild einfügen in linke obere Ecke, Originalgröße Set oPic = ActiveSheet.Shapes.AddPicture(sPicFile, _ False, True, Target.Left + 1, Target.Top + 1, -1, -1) If Not oPic Is Nothing Then If oPic.Width > oPic.Height Then ' Querformat oPic.Width = Target.Width - 2 If oPic.Height > Target.Height Then oPic.Height = Target.Height - 2 Else oPic.Height = Target.Height - 2 ' Hochformat If oPic.Width > Target.Width Then oPic.Width = Target.Width - 2 End If oPic.Left = Target.Left + 1 oPic.Top = Target.Top + 1 Set oPic = Nothing End If End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz


Anzeige
AW: Bild über VBA in einer Zelle einfügen
22.03.2021 09:34:41
Christian
Super. Das funktioniert.:)
Jetzt hab ich aber eine weitere kleine Macke entdeckt. Ist mir schon richtig unangenehm.
In meiner Beispiel-Excel, war noch eine weitere Funktion unter Modul hinterlegt.
Wenn ein Bild eingefügt ist, muss die Excel einmal geschlossen und wieder geöffnet werden. Dann ist das Modul aktiv.
Klickt man jetzt auf das eingefügte Bild, wird es vergrößert. Bei einem weiteren Klick verkleinert.
Sind aber mehrere Bilder eingefügt, ist immer das letzte Bild im Vordergrund. Also wenn ich jetzt ein anderes Bild vergrößere, ist das letzte eingefügte Bild im Vordergrund.
Kann man das Modul mit einem Code so erweitern, dass immer das Bild was vergrößert wird im Vordergrund steht?
Viele Grüße
Christian

Anzeige
AW: Bild über VBA in einer Zelle einfügen
22.03.2021 10:19:18
volti
Hallo Christian,
schau Dir meine Sub Grafik_GrossKlein aus dem vorhergehenden Post an.....
Da steht es drin:
.ZOrder msoBringToFront   ' In den Vordergrund
Gruß KH

AW: Bild über VBA in einer Zelle einfügen
22.03.2021 10:30:15
Christian
Ja, das ist richtig. Bei dem Code muss ich aber leider bei jedem Bild händisch das Makro zuweisen.
Bei dem Code, wird es automatisch hinterlegt bei einem Neustart von Excel.

Const LNG_FAKTOR = 2                        '
Wo müsste ich den Befehl hinzufügen
.ZOrder msoBringToFront   ' In den Vordergrund
Vielen Dank für deine Hilfe
Grüße
Christian

AW: Bild über VBA in einer Zelle einfügen
22.03.2021 13:35:52
volti
Hallo Christian,
so sollte es funktionieren:
Code:

[Cc][+][-]

Sub ZoomIN_OUT() Dim LNG_COUNTER As Long Dim BOL_ZOOMED As Boolean BOL_ZOOMED = False For LNG_COUNTER = 0 To UBound(ARY_ZOOMED_PIC) If Application.Caller = ARY_ZOOMED_PIC(LNG_COUNTER) Then BOL_ZOOMED = True Exit For End If Next LNG_COUNTER If BOL_ZOOMED = True Then ' //Bildname löschen ARY_ZOOMED_PIC(LNG_COUNTER) = "" ' //ZoomOUT With ActiveSheet.Shapes(Application.Caller) .Height = .Height / LNG_FAKTOR .Width = .Width / LNG_FAKTOR End With Else ' //Bildname merken ReDim Preserve ARY_ZOOMED_PIC(UBound(ARY_ZOOMED_PIC) + 1) ARY_ZOOMED_PIC(UBound(ARY_ZOOMED_PIC)) = Application.Caller ' //ZoomIN With ActiveSheet.Shapes(Application.Caller) .Height = .Height * LNG_FAKTOR .Width = .Width * LNG_FAKTOR .ZOrder msoBringToFront ' In den Vordergrund End With End If End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz


AW: Bild über VBA in einer Zelle einfügen
22.03.2021 14:33:27
Christian
Super. Es hat funktioniert. Jetzt bin ich auch wunschlos glücklich.
Dickes Dankeschön Karl-Heinz für deine Hilfe.
Grüße
Christian

AW: Bild über VBA in einer Zelle einfügen
22.03.2021 17:00:02
Hajo_Zi
Halo Christian,
offen bedeutet es soll noch eine Antwort kommen.
Warum ist dein Beitrag Offen.
Das ist nur meine Meinung zu dem Thema.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige