Einzelne Bilder nur in bestimmten Sheets laden
14.05.2010 16:29:22
NoNet
Hallo Nicki,
Du kannst Die Screenshots zunächst alle "exportieren", indem Du die Mappe per "Datei - Speichern unter... - Dateityp: Webseite (*.html)" speicherst. Es wird dann ein Unterordner mit allen enthaltenen Bildern angelegt - leider werden diese allerdings nur "img00x.jpg" (00x=lfd. Nr.) benannt (JPG oder PNG-Format !).
Du könntest dann per VBA alle Bilder aus der Mappe löschen :
Sub AlleBilderLoeschen()
Dim ws As Worksheet, sh As Shape
For Each ws In Worksheets
For Each sh In ws.Shapes
If sh.Type = msoPicture Then sh.Delete 'Bilder löschen
Next
Next
End Sub
Per Ereignismakro im zentralen Klassenmodul "DieseArbeitsmappe" könntest Du die relevanten Bilder beim Aktivieren eines Blattes laden bzw. bei Deaktivieren eines Blattes auch wieder löschen :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Const strPfad = "C:\Temp\Ordner\mit den\Bildern\" 'Ordnername mit "\" am Ende !
Dim lngB As Long, lngT As Long
Dim arBilder 'Bilder, die in diesem Tabellenblatt geladen werden sollen :
'Hier wird angegeben, welche Bilder in welche Tabelle geladen werden sollen :
Select Case UCase(Sh.Name) 'Name der Tabellenblätter hier im Code in GROSSBUCHSTABEN _
angeben !
Case "TABELLE1"
arBilder = Array("Image001.png", "Image002.png", "Image006.jpg")
Case "TABELLE2"
arBilder = Array("Image004.jpg", "Image005.png")
Case "TABELLE3"
arBilder = Array("Image003.jpg", "Image007.png", "Image008.jpg")
End Select
For lngB = LBound(arBilder) To UBound(arBilder)
With Sh.Pictures.Insert(strPfad & arBilder(lngB))
lngT = lngT + 10
.Top = lngT
.Left = 10
lngT = lngT + .Height
End With
Next
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim objSh As Shape
For Each objSh In Sh.Shapes
If objSh.Type = msoPicture Then objSh.Delete 'Bilder löschen
Next
End Sub
Das hat bei mir zumindest alles einwandfrei funktioniert !
Gruß, NoNet