Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1348to1352
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

VBA/ Makro Arbeitsmappe Bild zuordnen

VBA/ Makro Arbeitsmappe Bild zuordnen
24.02.2014 11:05:53
min
Hallo zusammen,
habe einen VBA-Code, um zugeordnete Bilder aus einem anderen Tabellenblatt in ein aktives Tabellenblatt einzufügen, wenn in einer Zelle ein Wert eingetragen wird. Da es aber viele Tabellenblätter geben wird, würde ich gern den VBA-Code nicht in jedem Tabellenblatt hinterlegen wollen, sondern in der gesamten Arbeitsmappe als Makro. Wie muss der Code dann verändert werden?
Der Code der einzelnen Tabellenblättern schaut nun so aus und funktioniert so:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim oldCell
oldCell = ActiveCell.Address
If Not IsEmpty(Target) Then
Dim iAdd, Art As String
With Sheets("PL")
iAdd = Cells(Target.Row, 2).Address
Art = Left(Cells(Target.Row, 4), 2)
Set a = .Columns(2).Find(What:=Art & "*", LookIn:=xlValues, LookAt:=xlWhole)
If Not a Is Nothing Then iAd = a.Row
For Each Bild In .Shapes
If Bild.TopLeftCell.Address = "$G$" & iAd Then
Bild.Copy
ActiveSheet.Paste Range(iAdd)
Rows(Target.Row).RowHeight = 40
Selection.ShapeRange.IncrementLeft 2.25
Selection.ShapeRange.IncrementTop 2.25
End If
Next
End With
Else
iAdd = Cells(Target.Row, 2).Address
For Each Bild In ActiveSheet.Shapes
If Bild.TopLeftCell.Address = iAdd Then
Bild.Delete
Rows(Target.Row).RowHeight = 15
End If
Next
End If
Range(oldCell).Select
End Sub
Das hab ich probiert, läuft aber nicht ganz durch:
für jedes Tabellenblatt:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 6 Then
Makro
End If
End Sub

für das Modul:
Sub Makro()
Dim oldCell
oldCell = ActiveCell.Address
' Bild suchen kopieren und einfügen
If Not IsEmpty(Target) Then
Dim iAdd, Art As String
With Sheets("PL")
iAdd = Cells(Target.Row, 2).Address
Art = Left(Cells(Target.Row, 4), 2)
Set a = .Columns(2).Find(What:=Art & "*", LookIn:=xlValues, LookAt:=xlWhole)
If Not a Is Nothing Then iAd = a.Row
For Each Bild In .Shapes
If Bild.TopLeftCell.Address = "$G$" & iAd Then
Bild.Copy
ActiveSheet.Paste Range(iAdd)
Rows(Target.Row).RowHeight = 40
Selection.ShapeRange.IncrementLeft 2.25
Selection.ShapeRange.IncrementTop 2.25
End If
Next
End With
Else
' Bild löschen
iAdd = Cells(Target.Row, 2).Address '>> bleibt hier hängen
For Each Bild In ActiveSheet.Shapes
If Bild.TopLeftCell.Address = iAdd Then
Bild.Delete
Rows(Target.Row).RowHeight = 15
End If
Next
End If
Range(oldCell).Select
End Sub Hier die Datei dazu:
https://www.herber.de/bbs/user/89400.xlsm
Könnte sich das jemand nochmal ansehen, das wäre toll?!?
Danke & Grüße
min

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA/ Makro Arbeitsmappe Bild zuordnen
24.02.2014 14:56:00
fcs
hallo Min,
nachfolgend die erforderlichen Anpassungen.
Die Sub "Makro" könnte man natürlich auch komplett unter "DieseArbeitsmappe" einbauen.
Gruß
Franz
'Code unter DieseArbeitsmappe
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Zelle As Range
Select Case Sh.Name
Case "PL", "TabelleABC"
'in dieen Blättern das Makro nicht starten
Case Else
'Makro starten wenn in Spalte F eine oder mehrere Zellen geändert werden.
If Target.Columns.Count = 1 And Target.Column = 6 And Target.Row >= 4 Then
For Each Zelle In Target
Call Makro(rngZelle:=Zelle)
Next
End If
End Select
End Sub
'Makro in einem allgemeinen Modul
Sub Makro(rngZelle As Range)
' Bild suchen kopieren und einfügen
Dim wks As Worksheet
Set wks = rngZelle.Parent 'Tabellenblatt mit der Zelle
If Not IsEmpty(rngZelle) Then
Dim iAdd, Art As String
With Sheets("PL")
iAdd = wks.Cells(rngZelle.Row, 2).Address
Art = Left(wks.Cells(rngZelle.Row, 4), 2)
Set a = .Columns(2).Find(What:=Art & "*", LookIn:=xlValues, LookAt:=xlWhole)
If Not a Is Nothing Then
iAd = a.Row
For Each Bild In .Shapes
If Bild.TopLeftCell.Address = "$G$" & iAd Then
Bild.Copy
wks.Paste Range(iAdd)
wks.Rows(rngZelle.Row).RowHeight = 40
Selection.ShapeRange.IncrementLeft 2.25
Selection.ShapeRange.IncrementTop 2.25
Exit For
End If
Next
Else
MsgBox "kein Bild zu """ & Art & """ vorhanden"
End If
End With
Else
' Bild löschen
iAdd = wks.Cells(rngZelle.Row, 2).Address
For Each Bild In wks.Shapes
If Bild.TopLeftCell.Address = iAdd Then
Bild.Delete
wks.Rows(rngZelle.Row).RowHeight = 15
End If
Next
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige