Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
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

Bilder aus Zeile 1 Speichern

Bilder aus Zeile 1 Speichern
16.02.2022 15:06:13
oraculix
Hallo Ihr Lieben!
In meiner Tabelle in Zeile1 Habe ich von A1: IX1 Bilder in jeder Zelle.
Wie kann ich diese im Verzeichniss" D:\EMDB\HTML\Schauspieler Bilder" alle speichern?
Die Namen der Bilder sollten aus der jeweiligen Zeile ausgelesen werden in der sie sich befinden.
Beispiel: Name des Schauspielers aus Zelle M1 " Ben Kingsley.jpg"
Gruß
Oraculix
Userbild

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bilder aus Zeile 1 Speichern
16.02.2022 18:16:30
Nepumuk
Hallo,
teste mal:

Option Explicit
Private Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" ( _
ByRef PicDesc As PICT_DESC, _
ByRef RefIID As GUID, _
ByVal fPictureOwnsHandle As LongPtr, _
ByRef IPic As IPicture) As LongPtr
Private Declare PtrSafe Function CopyImage Lib "user32.dll" ( _
ByVal handle As LongPtr, _
ByVal un1 As Long, _
ByVal n1 As Long, _
ByVal n2 As Long, _
ByVal un2 As Long) As LongPtr
Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32.dll" ( _
ByVal wFormat As Long) As Long
Private Declare PtrSafe Function OpenClipboard Lib "user32.dll" ( _
ByVal hwnd As LongPtr) As Long
Private Declare PtrSafe Function GetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long) As LongPtr
Private Declare PtrSafe Function DeleteObject Lib "gdi32.dll" ( _
ByVal hObject As LongPtr) As Long
Private Declare PtrSafe Function CLSIDFromString Lib "ole32.dll" ( _
ByVal lpsz As Any, _
ByRef pCLSID As GUID) As Long
Private Declare PtrSafe Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare PtrSafe Function CloseClipboard Lib "user32.dll" () As Long
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Type PICT_DESC
lSize As Long
lType As Long
hPic As LongPtr
hPal As LongPtr
End Type
Private Const PICTYPE_BITMAP As Long = 1
Private Const CF_BITMAP As Long = 2
Private Const IMAGE_BITMAP As Long = 0
Private Const LR_COPYRETURNORG As Long = &H4
Private Const GUID_IPICTUREDISP As String = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Private Function PastePicture(ByRef prlngptrCopy As LongPtr) As IPictureDisp
Dim lngReturn As Long, lngptrPointer As LongPtr
If CBool(IsClipboardFormatAvailable(CF_BITMAP)) Then
lngReturn = OpenClipboard(CLngPtr(Application.hwnd))
If lngReturn > 0 Then
lngptrPointer = GetClipboardData(CF_BITMAP)
prlngptrCopy = CopyImage(lngptrPointer, _
IMAGE_BITMAP, 0&, 0&, LR_COPYRETURNORG)
Call CloseClipboard
If lngptrPointer  0 Then Set PastePicture = _
CreatePicture(prlngptrCopy, 0)
End If
End If
End Function
Private Function CreatePicture( _
ByVal lngptrhPic As LongPtr, _
ByVal lngptrhPal As LongPtr) As IPictureDisp
Dim udtPicInfo As PICT_DESC, udtID_IDispatch As GUID
Dim objPicture As IPictureDisp
Call CLSIDFromString(StrPtr( _
GUID_IPICTUREDISP), udtID_IDispatch)
With udtPicInfo
.lSize = Len(udtPicInfo)
.lType = PICTYPE_BITMAP
.hPic = lngptrhPic
.hPal = lngptrhPal
End With
Call OleCreatePictureIndirect(udtPicInfo, _
udtID_IDispatch, 0&, objPicture)
Set CreatePicture = objPicture
Set objPicture = Nothing
End Function
Private Sub SaveShape(ByRef probjShape As Shape, ByVal pvstrPath As String)
Dim lngptrCopy As LongPtr
Dim objPicture As IPictureDisp
Call OpenClipboard(0)
Call EmptyClipboard
Call CloseClipboard
On Error Resume Next
Do
Call probjShape.CopyPicture(Appearance:=xlScreen, Format:=xlBitmap)
If Err.Number = 0 Then Exit Do
Call Err.Clear
Loop
On Error GoTo 0
DoEvents
Do
Set objPicture = PastePicture(lngptrCopy)
Loop While objPicture Is Nothing
Call SavePicture(Picture:=objPicture, Filename:=pvstrPath)
Call DeleteObject(lngptrCopy)
End Sub
Public Sub Export_Pictures()
Const PICTURE_PATH As String = "D:\EMDB\HTML\Schauspieler Bilder\"
Dim lngColumn As Long
Dim avntTemp As Variant
Dim strFilename As String, strTempFolder As String, strTempPath As String
Dim objShap As Shape
Dim objImageFile As Object, objImageProcess As Object
strTempFolder = Environ$("TMP") & "\"
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
With Worksheets("Schauspieler")
For lngColumn = 1 To .Cells(1, 1).End(xlToRight).Column
avntTemp = Split(.Cells(1, lngColumn).Formula, "&")
strFilename = Trim$(Replace$(Replace$(avntTemp(0), Chr$(34), vbNullString), "=", vbNullString))
strTempPath = strTempFolder & strFilename & ".bmp"
For Each objShap In .Shapes
If objShap.Type = msoPicture Then
If objShap.TopLeftCell.Column = lngColumn Then
Call SaveShape(objShap, strTempPath)
Call objImageFile.LoadFile(Filename:=strTempPath)
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
With objImageProcess
Call .Filters.Add(FilterID:=.FilterInfos("Convert").FilterID)
.Filters.Item(1).Properties("FormatID") = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
.Filters.Item(1).Properties("Quality") = 100
Set objImageFile = .Apply(Source:=objImageFile)
End With
Call objImageFile.SaveFile(Filename:=PICTURE_PATH & strFilename & ".jpg")
Call Kill(strTempPath)
Exit For
End If
End If
Next
Next
End With
Set objImageProcess = Nothing
Set objImageFile = Nothing
Set objShap = Nothing
End Sub
Gruß
Nepumuk
Anzeige
AW: Bilder aus Zeile 1 Speichern
16.02.2022 18:37:18
oraculix
servus du Genie! Danke erstmal
Es funktioniert nur teilweise es werden nur 197 von ca 250 Bilder gespeichert obwohl ich den Ordner vorher leere.
und es kommt dies Fehlermeldung
Laufzeitfehler '-2147024816 (80070050)':
Automatisierungsfehler
Die Datei ist vorhanden.
Gruß
Oraculix
AW: Bilder aus Zeile 1 Speichern
16.02.2022 18:52:54
Nepumuk
Hallo,
dann teste mal so:

Public Sub Export_Pictures()
Const PICTURE_PATH As String = "D:\EMDB\HTML\Schauspieler Bilder\"
Dim lngColumn As Long
Dim avntTemp As Variant
Dim strFilename As String, strTempFolder As String, strTempPath As String
Dim objShap As Shape
Dim objImageFile As Object, objImageProcess As Object
Call Kill(PICTURE_PATH & "*.*")
strTempFolder = Environ$("TMP") & "\"
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
With Worksheets("Schauspieler")
For lngColumn = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
If .Cells(1, lngColumn).HasFormula Then
avntTemp = Split(.Cells(1, lngColumn).Formula, "&")
strFilename = Trim$(Replace$(Replace$(avntTemp(0), Chr$(34), vbNullString), "=", vbNullString))
strTempPath = strTempFolder & strFilename & ".bmp"
For Each objShap In .Shapes
If objShap.Type = msoPicture Then
If objShap.TopLeftCell.Column = lngColumn Then
Call SaveShape(objShap, strTempPath)
Call objImageFile.LoadFile(Filename:=strTempPath)
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
With objImageProcess
Call .Filters.Add(FilterID:=.FilterInfos("Convert").FilterID)
.Filters.Item(1).Properties("FormatID") = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
.Filters.Item(1).Properties("Quality") = 100
Set objImageFile = .Apply(Source:=objImageFile)
End With
If Dir$(PICTURE_PATH & strFilename & ".jpg") = vbNullString Then
Call objImageFile.SaveFile(Filename:=PICTURE_PATH & strFilename & ".jpg")
Else
Call MsgBox("Die Datei: " & strFilename & " ist doppelt.", vbExclamation, "Hinweis")
End If
Call Kill(strTempPath)
Exit For
End If
End If
Next
End If
Next
End With
Set objImageProcess = Nothing
Set objImageFile = Nothing
Set objShap = Nothing
End Sub
Gruß
Nepumuk
Anzeige
AW: Genial wie immer Erledigt Danke!!!
16.02.2022 19:05:38
oraculix
Danke
Variante 2 Funktioniert nicht sagt Datei nicht gefunden.
Habe die erste Variante nochmal versucht da war tatsächlich ein Schauspieler Doppelt
und jetzt habe ich die 257 Bilder Vielen Dank.
Die anderen Bilder sind noch in Arbeit bin jetzt bei 1044 von 2700
Gruß
Oraculix
AW: Genial wie immer Erledigt Danke!!!
16.02.2022 19:26:57
Nepumuk
Hallo,
ja, wenn der Ordner leer ist läuft die Prozedur in einen Fehler. Teste mal das ;-)

Public Sub Export_Pictures()
Const PICTURE_PATH As String = "H:\oraculix\Bilder\" '"D:\EMDB\HTML\Schauspieler Bilder\"
Dim lngColumn As Long
Dim avntTemp As Variant
Dim strFilename As String, strTempFolder As String, strTempPath As String
Dim objShap As Shape
Dim objImageFile As Object, objImageProcess As Object
If Dir$(PICTURE_PATH & "*.*")  vbNullString Then Call Kill(PICTURE_PATH & "*.*")
strTempFolder = Environ$("TMP") & "\"
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
With objImageProcess
Call .Filters.Add(FilterID:=.FilterInfos("Scale").FilterID)
With .Filters.Item(1)
.Properties("PreserveAspectRatio") = True
.Properties("MaximumWidth") = 1000
.Properties("MaximumHeight") = 1000
End With
Call .Filters.Add(FilterID:=.FilterInfos("Convert").FilterID)
With .Filters.Item(2)
.Properties("FormatID") = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
.Properties("Quality") = 100
End With
End With
With Worksheets("Schauspieler")
For lngColumn = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
If .Cells(1, lngColumn).HasFormula Then
avntTemp = Split(.Cells(1, lngColumn).Formula, "&")
strFilename = Trim$(Replace$(Replace$(avntTemp(0), Chr$(34), vbNullString), "=", vbNullString))
strTempPath = strTempFolder & strFilename & ".bmp"
For Each objShap In .Shapes
If objShap.Type = msoPicture Then
If objShap.TopLeftCell.Column = lngColumn Then
Call SaveShape(objShap, strTempPath)
Call objImageFile.LoadFile(Filename:=strTempPath)
Set objImageFile = objImageProcess.Apply(Source:=objImageFile)
If Dir$(PICTURE_PATH & strFilename & ".jpg") = vbNullString Then
Call objImageFile.SaveFile(Filename:=PICTURE_PATH & strFilename & ".jpg")
Else
Call MsgBox("Die Datei: " & strFilename & " ist doppelt.", vbExclamation, "Hinweis")
End If
Call Kill(strTempPath)
Exit For
End If
End If
Next
End If
Next
End With
Set objImageProcess = Nothing
Set objImageFile = Nothing
Set objShap = Nothing
End Sub
Gruß
Nepumuk
Anzeige
AW: Genial wie immer Erledigt Danke!!!
16.02.2022 20:10:23
oraculix
Danke Funktioniert wenn ich das Original Verzeichnis wieder eingebe.
"D:\EMDB\HTML\Schauspieler Bilder\"
Gruß
Oraculix

296 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige