Anzeige
Archiv - Navigation
1564to1568
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

Bild einfügen in meheren Positionen

Bild einfügen in meheren Positionen
04.07.2017 15:13:43
Rene
Hallo zusammen,
ich benötige mal Hilfe.
Ich habe ein Code gefunden der mir hilft ein Bild in eine Besten Zellenabschnitt einzufügen, aber nun kommt das Problem ich möchte das Bild in meheren Zellbereichen
zum Beispiel:
B1 bis C12
das gleiche Bild dann nochmal in
B22 bis D26
Ich hoffe ihr könnt mir helfen, anbei mal der Code
lg
Sub InsertPicture()
Dim sPicture As String, pic As Picture
sPicture = Application.GetOpenFilename _
("Pictures (*.gif; *.jpg; *.bmp; *.tif), *.gif; *.jpg; *.bmp; *.tif", _
, "Select Picture to Import")
If sPicture = "False" Then Exit Sub
Set pic = ActiveSheet.Pictures.Insert(sPicture)
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Height = Range("B8:B14").Height
.Width = Range("B8:B14").Width
.Top = Range("B8:B14").Top
.Left = Range("B8:B14").Left
.Placement = xlMoveAndSize
End With
Set pic = Nothing
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild einfügen in meheren Positionen
04.07.2017 15:49:20
Michael
Hallo!
zB so:
Sub InsertPicture()
Dim sPicture As String, pic As Picture, a, i&, r As Range
a = Array("B1:C12", "B22:D26")
sPicture = Application.GetOpenFilename _
("Pictures (*.gif; *.jpg; *.bmp; *.tif), *.gif; *.jpg; *.bmp; *.tif", _
, "Select Picture to Import")
If sPicture = "False" Then Exit Sub
For i = LBound(a) To UBound(a)
Set r = Range(a(i))
Set pic = ActiveSheet.Pictures.Insert(sPicture)
With pic
.ShapeRange.LockAspectRatio = msoFalse
.Height = r.Height
.Width = r.Width
.Top = r.Top
.Left = r.Left
.Placement = xlMoveAndSize
End With
Set pic = Nothing
Next i
Erase a: Set r = Nothing
End Sub
Die gewünschten Bereich kannst Du hier definieren:
a = Array("B1:C12", "B22:D26")
LG
Michael
Anzeige
AW: Bild einfügen in meheren Positionen
04.07.2017 16:35:28
Rene
Hallo Michael,
ich danke dir, esfunktioniert perfekt.
nun habe ich doch noch ein Problem.
Wenn ich die Bilder nicht auf Zellenbasis machen möchte sondern auf Kordinaten.
da manche Bilder leider in einer 1/2 Zelle drin sein müssen, da ich leider die Zellen nicht verschieben kann.
Hättest du da auch eine Idee?
Bisher löse ich das Problem so:
Private Sub cmd01_1_Click()
Const BB01klein = "Rechteck01_1"
Const BB01aklein = "Rechteck01_1a"
Const BB01bklein = "Rechteck01_1b"
Const BB01cklein = "Rechteck01_1c"
Const BB01dklein = "Rechteck01_1d"
Const Foto01_01 = "Foto_01_1"
'Fügt Bild 1.1 ein
Range("A54").Select
On Error Resume Next
Dim ObjektDLG As Dialog
Set ObjektDLG = Application.Dialogs(xlDialogInsertPicture)
ObjektDLG.Show
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 140
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 605
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Selection.ShapeRange.Name = "Foto_01_1"
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A264").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 127
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 3855
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A301").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 93
Selection.ShapeRange.Width = 124
Selection.ShapeRange.Top = 4445
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A336").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 112
Selection.ShapeRange.Top = 4952
Selection.ShapeRange.Left = 18
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A372").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 70
Selection.ShapeRange.Width = 93
Selection.ShapeRange.Top = 5521
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Range("A54").Select
If Shapes(Foto01_01).Visible = msoTrue Then
Shapes(BB01klein).Visible = msoTrue
Shapes(BB01aklein).Visible = msoTrue
Shapes(BB01bklein).Visible = msoTrue
Shapes(BB01cklein).Visible = msoTrue
Shapes(BB01dklein).Visible = msoTrue
Else
Shapes(BB01klein).Visible = msoFalse
Shapes(BB01aklein).Visible = msoFalse
Shapes(BB01bklein).Visible = msoFalse
Shapes(BB01cklein).Visible = msoFalse
Shapes(BB01dklein).Visible = msoFalse
End If
End Sub

Private Sub cmd01_2_Click()
Const BB02klein = "Rechteck01_2"
Const BB02aklein = "Rechteck01_2a"
Const BB02bklein = "Rechteck01_2b"
Const BB02cklein = "Rechteck01_2c"
Const BB02dklein = "Rechteck01_2d"
Const Foto01_02 = "Foto_01_2"
'Fügt Bild 1.2 ein
Range("A54").Select
On Error Resume Next
Dim ObjektDLG As Dialog
Set ObjektDLG = Application.Dialogs(xlDialogInsertPicture)
ObjektDLG.Show
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 140
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 605
Selection.ShapeRange.Left = 189
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Selection.ShapeRange.Name = "Foto_01_2"
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A264").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 127
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 3855
Selection.ShapeRange.Left = 189
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A301").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 93
Selection.ShapeRange.Width = 124
Selection.ShapeRange.Top = 4445
Selection.ShapeRange.Left = 124
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A336").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 112
Selection.ShapeRange.Top = 4952
Selection.ShapeRange.Left = 130
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A372").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 70
Selection.ShapeRange.Width = 93
Selection.ShapeRange.Top = 5521
Selection.ShapeRange.Left = 93
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Range("A54").Select
If Shapes(Foto01_02).Visible = msoTrue Then
Shapes(BB02klein).Visible = msoTrue
Shapes(BB02aklein).Visible = msoTrue
Shapes(BB02bklein).Visible = msoTrue
Shapes(BB02cklein).Visible = msoTrue
Shapes(BB02dklein).Visible = msoTrue
Else
Shapes(BB02klein).Visible = msoFalse
Shapes(BB02aklein).Visible = msoFalse
Shapes(BB02bklein).Visible = msoFalse
Shapes(BB02cklein).Visible = msoFalse
Shapes(BB02dklein).Visible = msoFalse
End If
End Sub
lg
Anzeige
AW: Bild einfügen in meheren Positionen
04.07.2017 16:36:35
Rene
Hallo Michael,
ich danke dir, esfunktioniert perfekt.
nun habe ich doch noch ein Problem.
Wenn ich die Bilder nicht auf Zellenbasis machen möchte sondern auf Kordinaten.
da manche Bilder leider in einer 1/2 Zelle drin sein müssen, da ich leider die Zellen nicht verschieben kann.
Hättest du da auch eine Idee?
Bisher löse ich das Problem so:
Private Sub cmd01_1_Click()
Const BB01klein = "Rechteck01_1"
Const BB01aklein = "Rechteck01_1a"
Const BB01bklein = "Rechteck01_1b"
Const BB01cklein = "Rechteck01_1c"
Const BB01dklein = "Rechteck01_1d"
Const Foto01_01 = "Foto_01_1"
'Fügt Bild 1.1 ein
Range("A54").Select
On Error Resume Next
Dim ObjektDLG As Dialog
Set ObjektDLG = Application.Dialogs(xlDialogInsertPicture)
ObjektDLG.Show
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 140
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 605
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Selection.ShapeRange.Name = "Foto_01_1"
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A264").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 127
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 3855
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A301").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 93
Selection.ShapeRange.Width = 124
Selection.ShapeRange.Top = 4445
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A336").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 112
Selection.ShapeRange.Top = 4952
Selection.ShapeRange.Left = 18
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_1").Select
Selection.Copy
'Range("A372").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 70
Selection.ShapeRange.Width = 93
Selection.ShapeRange.Top = 5521
Selection.ShapeRange.Left = 0
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Range("A54").Select
If Shapes(Foto01_01).Visible = msoTrue Then
Shapes(BB01klein).Visible = msoTrue
Shapes(BB01aklein).Visible = msoTrue
Shapes(BB01bklein).Visible = msoTrue
Shapes(BB01cklein).Visible = msoTrue
Shapes(BB01dklein).Visible = msoTrue
Else
Shapes(BB01klein).Visible = msoFalse
Shapes(BB01aklein).Visible = msoFalse
Shapes(BB01bklein).Visible = msoFalse
Shapes(BB01cklein).Visible = msoFalse
Shapes(BB01dklein).Visible = msoFalse
End If
End Sub

Private Sub cmd01_2_Click()
Const BB02klein = "Rechteck01_2"
Const BB02aklein = "Rechteck01_2a"
Const BB02bklein = "Rechteck01_2b"
Const BB02cklein = "Rechteck01_2c"
Const BB02dklein = "Rechteck01_2d"
Const Foto01_02 = "Foto_01_2"
'Fügt Bild 1.2 ein
Range("A54").Select
On Error Resume Next
Dim ObjektDLG As Dialog
Set ObjektDLG = Application.Dialogs(xlDialogInsertPicture)
ObjektDLG.Show
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 140
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 605
Selection.ShapeRange.Left = 189
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Selection.ShapeRange.Name = "Foto_01_2"
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A264").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 127
Selection.ShapeRange.Width = 188
Selection.ShapeRange.Top = 3855
Selection.ShapeRange.Left = 189
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A301").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 93
Selection.ShapeRange.Width = 124
Selection.ShapeRange.Top = 4445
Selection.ShapeRange.Left = 124
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A336").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 84
Selection.ShapeRange.Width = 112
Selection.ShapeRange.Top = 4952
Selection.ShapeRange.Left = 130
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
ActiveSheet.Shapes.Range("Foto_01_2").Select
Selection.Copy
'Range("A372").Select
ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 70
Selection.ShapeRange.Width = 93
Selection.ShapeRange.Top = 5521
Selection.ShapeRange.Left = 93
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.Rotation = 0#
Range("A54").Select
If Shapes(Foto01_02).Visible = msoTrue Then
Shapes(BB02klein).Visible = msoTrue
Shapes(BB02aklein).Visible = msoTrue
Shapes(BB02bklein).Visible = msoTrue
Shapes(BB02cklein).Visible = msoTrue
Shapes(BB02dklein).Visible = msoTrue
Else
Shapes(BB02klein).Visible = msoFalse
Shapes(BB02aklein).Visible = msoFalse
Shapes(BB02bklein).Visible = msoFalse
Shapes(BB02cklein).Visible = msoFalse
Shapes(BB02dklein).Visible = msoFalse
End If
End Sub

Das Problem bei 48 Bildern benötigt die Datei sehr lange und ich versuche ne schnellere Möglichkeit.
lg
lg
Anzeige
AW: Bild einfügen in meheren Positionen
04.07.2017 17:23:32
Michael
Hallo!
Hab mir Dein Code-Konvolut jetzt nicht durchgesehen, aber bzgl.
da manche Bilder leider in einer 1/2 Zelle drin sein müssen
kannst Du Dir die Koordinaten auf dem Blatt ja selbst zusammenbauen, wenn Du eine/mehrere Ausgangszelle(n) kennst. Denn wie in meinem Bsp. gibt Dir zB
Range("C5").Left
bzw.
Range("C5").Top
die Position der Zelle auf dem Blatt (linker und oberer Rand) - damit kannst Du natürlich auch rechnen, bspw.
Range("C5").Left / 2
usw.
Ich bin für heute schon weg, wenn Du noch Hilfe brauchst, kann ich erst morgen wieder reinschauen.
LG
Michael
Anzeige
AW: Bild einfügen in meheren Positionen
05.07.2017 13:31:30
Rene
Kann ich dies so in das Array eintragen?
Array a = ("Range("C5").Left = 189","Range("C5").Top = 125", )
Bisher habe ich immer eine Copy Version des Bilds aber möchte den Code gerne abspecken :)
Die Bilder sind auch alle unterschiedlich groß.
Vielen Dank für deine Hilfe.
lg
René
AW: Bild einfügen in meheren Positionen
05.07.2017 13:58:30
Michael
Hallo!
Kann ich dies so in das Array eintragen?
Nein. Offenbar ist Dir nicht klar, was der Zweck des Arrays ist.
Das Array habe ich aufgrund Deiner Ausgangsfrage im Code eingeführt; Du wolltest ja Bilder mehrfach auf dem Blatt einfügen, über unterschiedlichen Zellbereichen. Im Array werden lediglich die Bereichsadressen gesammelt, und anschließend wird für jedes Element im Array (jeden so hinterlegten Zell-Bereich) ein Bereichsobjekt definiert (die Variable r wird als Bereichs-Objekt deklariert, und erhält durch Zuweisung des Adress-Strings aus dem Array einen "echten" Bezug zum Blatt-Bereich), über die dann das Bild eingefügt wird.
Die .Left- (bzw. .Top- usw.) Eigenschaft steht dem Bereichsobjekt (bei mir r) zur Verfügung (also etwa r.Top), nicht einem Adress-String.
Kompliziert, und in Unkenntnis Deiner echten Gegebenheiten nicht eindeutig beantwortbar, wird es, wenn Du ein Bild in "reguläre" Bereiche einfügen willst (wie bisher im Code angenommen) UND zusätzlich in Bereiche, die Du erst berechnen musst (Deine angesprochenen Koordinaten). Im Array würde das evtl. so aussehen
a = Array("B1:C12", "B22:D26", "C5", "F18")
wobei hier das Bild bspw. flächig über B1:C12 und B22:D26 eingefügt werden soll, die Zellen C5 und F18 aber nur als Ankerpunkte für die korrekte Berechnung der weiteren Einfügekoordinaten dienen sollen. Das müsste dann aber im Code auch berücksichtigt werden, dass mit einem Array-Element, das keine Bereichs-Adresse, sondern nur eine Einzelzell-Adresse beinhaltet, anders weitergearbeitet wird.
Zudem ist das
Range("C5").Left = 189
sowieso nicht möglich, denn Range("C5").Left gibt Dir ein Ergebnis zurück, und zwar die Position des linken Randes der Zelle - Du würdest in diesem Fall jenen Wert aber zuweisen, was natürlich nicht funktioniert.
Bisher habe ich immer eine Copy Version des Bilds aber möchte den Code gerne abspecken :)
Die Bilder sind auch alle unterschiedlich groß

Was das mit Deiner Ausgangsfrage zu tun hat, kann ich leider nicht nachvollziehen.
Abschließend: Hilfe für das korrekte Positionieren Deiner Bilder ist nur möglich, wenn alle Parameter und Umstände Deiner Gegebenheiten dafür bekannt sind.
LG
Michael
Anzeige
AW: Bild einfügen in meheren Positionen
05.07.2017 14:20:21
Rene
Du hast mir sehr geholfen :D,
Ich danke dir :).
Werde mit deinen Tipps arbeiten und etwas gutes basteln.
lg
Gern, viel Erfolg, owT
05.07.2017 14:54:52
Michael

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige