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

Forumthread: Bild einfügen mit VBA

Bild einfügen mit VBA
22.05.2024 10: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 11: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 12: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 07: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 09: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 09: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 16:02:42
Stefan
Hallo,

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

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

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

AW: verkürzt..
23.05.2024 17: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 06:39:17
Stefan
Super, jetzt funktioniert es :)

Vielen Dank euch allen!

Gruß
Stefan
AW: verkürzt..
24.05.2024 09: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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige