Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1192to1196
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

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
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
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige