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

Bild einfügen mit VBA

Forumthread: Bild einfügen mit VBA

Bild einfügen mit VBA
22.05.2024 12:28:34
Stefan
Hallo zusammen,

ich hatte diese Frage schon einmal offen, aber leider keine funktionierende Lösung erhalten.
Ist es über VBA möglich folgendes zu steuern (siehe Beispieldatei)?

Reiter Tabelle2: Wenn ich bei C4, C5... ein x eintrage, soll dort automatisch anstatt das X, das Bild aus dem Reiter VORLAGE (B2) übernommen werden.

https://www.herber.de/bbs/user/169635.xlsx

Vielen Dank schon mal im Voraus

Beste Grüße
Stefan
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild einfügen mit VBA
22.05.2024 13:29:04
UweD
Hallo

so?

- Rechtsclick auf den Tabellenblattreiter von Tabelle2
- Code anzeigen
- rechts diesen Code eintragen

Option Explicit


Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fehler
Const APPNAME = "Worksheet_Change"

Dim Zeile As Integer, TBv As Worksheet, Z1 As Integer, RNG As Range

Set TBv = Sheets("VORLAGE")
Z1 = 3 'Überschrift
Set RNG = Range("C:D")

If Not Intersect(Target, RNG) Is Nothing Then
If Target.Row > Z1 Then
If Target = "x" Then
Zeile = WorksheetFunction.CountIf(TBv.Columns(1), Cells(Z1, Target.Column))
If Zeile > 0 Then
Zeile = WorksheetFunction.Match(Cells(Z1, Target.Column), TBv.Columns(1), 0)
Application.EnableEvents = False
TBv.Cells(Zeile, 2).Copy Target

End If
End If
End If
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number > 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub


Der Code überwacht Änderungen in Spalte C und D ab Zeile 4
und kopiert dann die Zelle (in der sich dann auch die Grafik befinden soll)

LG UweD
Anzeige
AW: Bild einfügen mit VBA
22.05.2024 14:10:51
Alwin Weisangler
Hallo Stefan,
Wenn das Problem mit dem X in der Zielzelle nicht wäre, könntest du dies per Formel (Office 365) machen.
Da du aber in die Zelle wo das x gesetzt wird das Bild darüber haben willst, wäre dies nur mit etwas VBA zu erschlagen.

Ins Modul des Tabellenblattes "Tabelle2":


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bild As Shape: Set Bild = Tabelle1.Shapes("Picture 4")
If Not Intersect(Target, Range("C4:C" & Cells(Rows.Count, 2).End(xlUp).Row)) Is Nothing Then
Application.EnableEvents = False
If LCase(Target.Cells) = "x" Then
Bild.Copy
With Target.Cells
.PasteSpecial
.Activate
End With
End If
Application.EnableEvents = True
End If
End Sub


Gruß Uwe
Anzeige
AW: Bild einfügen mit VBA
23.05.2024 09:58:52
Stefan
Hallo Uwe,

vielen Dank, das funktioniert genau so wie ich es wollte.
Für meine Tabelle habe ich es wie folgt angepasst....

Option Explicit


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bild As Shape: Set Bild = Tabelle3.Shapes("Grafik 14")
If Not Intersect(Target, Range("C6:C122" & Cells(Rows.Count, 2).End(xlUp).Row)) Is Nothing Then
Application.EnableEvents = False
If LCase(Target.Cells) = "x" Then
Bild.Copy
With Target.Cells
.PasteSpecial
.Activate
End With
End If
Application.EnableEvents = True
End If
End Sub


Jetzt würde ich gerne mit einer anderen Grafik in D6:D122 weiter machen.
Option Explicit


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bild As Shape: Set Bild = Tabelle3.Shapes("Grafik 16")
If Not Intersect(Target, Range("D6:D122" & Cells(Rows.Count, 2).End(xlUp).Row)) Is Nothing Then
Application.EnableEvents = False
If LCase(Target.Cells) = "x" Then
Bild.Copy
With Target.Cells
.PasteSpecial
.Activate
End With
End If
Application.EnableEvents = True
End If
End Sub


wie kann ich diese beiden codes verbinden?

Vielen Dank,
Gruß
Stefan
Anzeige
AW: Bild einfügen mit VBA
23.05.2024 11:35:16
UweD
Hallo

Ich bin zwar der andere Uwe, aber helfe dir auch bei diesem Code gerne weiter.

Tipp vorweg:
Wenn du mit dem Ausschalten von Events arbeitest, solltest du immer eine Fehlerbehandlung mit einbauen, sonst bleiben Diese im Fehlerfall ausgeschaltet und werden nicht weiter ausgeführt.

So?
Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo Fehler
Const APPNAME = "Worksheet_Change"
Dim Bild As Shape, LR As Long
LR = Cells(Rows.Count, 2).End(xlUp).Row
If Not Intersect(Target, Range("C6:C" & LR)) Is Nothing Then
Set Bild = Tabelle3.Shapes("Grafik 14")
If LCase(Target.Cells) = "x" Then
Bild.Copy
Application.EnableEvents = False
With Target.Cells
.PasteSpecial
.Activate
End With
End If
End If

If Not Intersect(Target, Range("D6:D" & LR)) Is Nothing Then
Set Bild = Tabelle3.Shapes("Grafik 16")
If LCase(Target.Cells) = "x" Then
Bild.Copy
Application.EnableEvents = False
With Target.Cells
.PasteSpecial
.Activate
End With
End If
End If

'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number > 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub


Das Festlegen der letzten Zeile habe ich (meiner Meinung nach) berichtigt

LG UweD
Anzeige
AW: verkürzt..
23.05.2024 11:41:32
UweD
Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo Fehler
Const APPNAME = "Worksheet_Change"
Dim Bild As Shape, LR As Long
LR = Cells(Rows.Count, 2).End(xlUp).Row

If Not Intersect(Target, Range("C6:C" & LR, "D6:D" & LR)) Is Nothing Then
Select Case Target.Column
Case 3
Set Bild = Tabelle3.Shapes("Grafik 14")
Case 4
Set Bild = Tabelle3.Shapes("Grafik 16")
End Select

If LCase(Target.Cells) = "x" Then
Bild.Copy
Application.EnableEvents = False
With Target.Cells
.PasteSpecial
.Activate
End With
End If
End If

'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number > 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear


LG UweD
Anzeige
AW: verkürzt..
23.05.2024 18:02:42
Stefan
Hallo,

das funktioniert leider gar nicht.
Ich bekomme nicht mal eine Fehlermeldung.

Gruß
Stefan
AW: verkürzt..
23.05.2024 18:54:17
UweD
Hi

Dann lade mal deine Datei hoch, so wie sie aktuell aufgebaut ist.

AW: verkürzt..
23.05.2024 19:06:17
schauan
Hallöchen,

mach auch mal das:

1)
beende Excel und starte alles neu oder nimm ein kleines Makro
Sub EneMeneElevents()

Application.EnableEvents = True
End Sub

klappt es dann?

2)
Setze einen Haltepunkt in diese Zeile
LR = Cells(Rows.Count, 2).End(xlUp).Row
Kommst Du bzw. das Makro dahin?
Welchen Wert hat LR?
Wie geht es weiter?
Anzeige
AW: verkürzt..
24.05.2024 08:39:17
Stefan
Super, jetzt funktioniert es :)

Vielen Dank euch allen!

Gruß
Stefan
AW: verkürzt..
24.05.2024 11:21:12
UweD
Hallo

Wenn es die Ursache wie unter 1) beschrieben war, dann trifft genau das zu, was ich dir geraten hatte,

...Eine Fehlerbehandlung einzubauen, sobald du "Application.EnableEvents = False" verwendest.

In einem Fehlerfall, oder bei Abbruch wird Das nicht mehr zurückgesetzt und bis zum nächsten Excelstart reagiert die Datei nicht mehr auf Ereignisse.


LG UweD
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige