Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1640to1644
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 Excel | Bildformat-Überprüfung

VBA Excel | Bildformat-Überprüfung
24.08.2018 11:20:37
Usen
Guten Tag,
Um meine Kenntnisse zu vertiefen, habe ich mir folgende Aufgabe gestellt.
Ich will quasi über ein Button überprüfen, ob das eingefügte Bild in Excel ein JPG oder ein GIF ist.
Sollte das Bild kein JPG oder GIF sein, dann soll eine Fehlermeldung (Infobox) aufpoppen und dem Benutzer eine Rückmeldung geben.
Ich würde gerne wissen, wie ich dem Programm sage, dass er auf das Bildformat zugreift. Mir fehlt da die Verknüpfung auf diese Eigenschaft. Die eingefügten Bilder befinden sich nur in einer Spalte.
Gibt es eine Methode, womit ich die oben beschriebene Problemstellung möglichst simple löse?
Ich bin leider kein Programmierexperte und stehe noch am Anfang. Ich lerne noch und wäre sehr dankbar von erfahrenen Programmierern lernen zu können.

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Excel | Bildformat-Überprüfung
24.08.2018 11:31:53
EtoPHG
Hallo Usen,
Zitat:Ich will quasi über ein Button überprüfen, ob das eingefügte Bild in Excel ein JPG oder ein GIF ist.
IMHO geht das nicht. Ein in eine Tabelle eingefügtes Bild verliert die Information, ob es ein JPG oder GIF war, da die Bilder in ein eigenes (internes) Format konvertiert werden!
Gruess Hansueli
AW: VBA Excel | Bildformat-Überprüfung
24.08.2018 12:17:00
Nepumuk
Hallo,
wenn man die xlsx / xlsm entzippt kann man die Bilder mit dem ursprünglichen Format finden. Aber ich habe keine Idee wie ich das per VBA machen könnte.
Gruß
Nepumuk
AW: Excel unzip
24.08.2018 12:22:54
Fennek
Hallo,
Microsoft versteckt einige Detailinfos, z.B. GUUID in den XLM-Daten. Deshalb nur ein etwas vager Tip:
Wenn man an den Namen einer Xl-Datei einfach ein ".zip" anhängt, kann man mit einem schlecht dokumentierten NameSpace.Copy - Befehl beliebige Teile des Paketes an eine andere Stelle Kopieren. Die Suchmaschine mit "Excel unzip Rondebruin" sollte helfen.
mfg
Anzeige
AW: Excel unzip
24.08.2018 12:42:15
Nepumuk
Hallo,
das einfachste wäre, die Tabelle schützen und Bilder nur über einen eigenen Dialog einfügen zu lassen.
Gruß
Nepumuk
Hier eine Möglichkeit...
24.08.2018 15:58:03
Case
Hallo Nepumuk, :-)
... wie das gehen könnte: ;-)
Bilder - Excel...
Darauf achten, dass die ZIP-Datei nicht in den "Untiefen" der HDD gespeichert wird, damit Pfad- und Dateiname zusammen nicht zu lang wird. ;-)
Servus
Case

AW: Hier eine Möglichkeit...
24.08.2018 16:07:06
Nepumuk
Hallo Case,
so ungefähr habe ich mir das gedacht. Danke!!!
Gruß
Nepumuk
Anzeige
AW: Teillösung
24.08.2018 16:54:34
Fennek
Hallo,
mit diesem Code kann man die Ordner der "Bilder.xlsb" auflisten. Das Listen des Ordner "xl/media" ist mir nicht gelungen:

Sub F_en()
f = "c:\temp\Bilder.xlsb"
'Name f As f & ".zip"
DoEvents
With CreateObject("shell.application").Namespace(Pf & f & ".zip")
For i = 0 To .Items.Count - 1
Debug.Print .Items.Item(i)
Next i
End With
End Sub
Der Rename-Befehl darf nur einmal ausgeführt werden.
Wenn die Namen bekannt sind, kann mit .CopyHere in die normale HD kopiert werden.
mfg
noch eine Möglichkeit...
24.08.2018 17:39:14
Anton
Hallo zusammen,
ohne Datei zu entpacken,etwa so:
Code in Zwischenablage:

Sub b()
  Dim objShell As Object, objExec As Object  
  Dim strResults As String, zeile  
  Set objShell = CreateObject("WScript.Shell")  
  Set objExec = objShell.Exec(ThisWorkbook.Path & Application.PathSeparator & _
        "7za.exe l -slt " & Chr(34) & ThisWorkbook.Path & Application.PathSeparator & _
        "Bilder.xlsb" & Chr(34))
  strResults = LCase(objExec.StdOut.ReadAll)  
  For Each zeile In Split(strResults, vbCrLf)  
    If InStr(1, zeile, "\media\") <> 0 Then Debug.Print zeile    
  Next
End Sub  

mfg Anton
Anzeige
AW: Ergebnis
24.08.2018 18:48:43
Fennek
Hallo,
ein Ansatz:

Sub zpath()
Dim sh, n
Set sh = CreateObject("shell.application")
Set n = sh.Namespace("C:\temp\Bilder.xlsb.zip")
recur sh, n
End Sub
Sub recur(sh, n)
Dim i, subn
For Each i In n.items
If i.isfolder Then
Set subn = sh.Namespace(i)
'Debug.Print , , subn
If subn = "xl" Or subn = "media" Then
recur sh, subn
End If
Else
If InStr(1, i.Path, "media") > 0 Then Debug.Print i.Path
End If
Next
Exit Sub
End Sub
mfg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige