Anzeige

VBA Excel | Bildformat-Überprüfung


Usen

Grünschnabel
#1
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. :D
 

Zvoni

Erfahrenes Mitglied
#2
aus dem Ärmel zwei Ansätze:
1) Registry auf Basis der Datei-Endung durchsuchen. --> Funktioniert natürlich nur, sofern die Datei-Endung auch registriert ist
2) Die JPG bzw. GIF im Binary-Mode öffnen, und die ersten Bytes prüfen.

Bei JPG: Bytes 1+2 müssen HEX: FF D8 - Bytes 3 bis 11 müssen HEX: FF E0 00 10 4A 46 49 46 00 sein
Bei GIF: Bytes 1 bis 6 müssen HEX: 47 49 46 38 39 61 sein

Wobei die 2. Variante die sicherere ist. Szenario: Du bekommst ein echtes (korrektes) GIF zugeschickt, und der User benennt die Datei im Explorer in JPG um. Variante 1 wird dir bestätigen, dass es ein JPG ist (was falsch ist), Variante 2 wird dir bestätigen dass es ein GIF ist, egal, welche Datei-Endung dranhängt
 

Usen

Grünschnabel
#3
aus dem Ärmel zwei Ansätze:
1) Registry auf Basis der Datei-Endung durchsuchen. --> Funktioniert natürlich nur, sofern die Datei-Endung auch registriert ist
2) Die JPG bzw. GIF im Binary-Mode öffnen, und die ersten Bytes prüfen.

Bei JPG: Bytes 1+2 müssen HEX: FF D8 - Bytes 3 bis 11 müssen HEX: FF E0 00 10 4A 46 49 46 00 sein
Bei GIF: Bytes 1 bis 6 müssen HEX: 47 49 46 38 39 61 sein

Wobei die 2. Variante die sicherere ist. Szenario: Du bekommst ein echtes (korrektes) GIF zugeschickt, und der User benennt die Datei im Explorer in JPG um. Variante 1 wird dir bestätigen, dass es ein JPG ist (was falsch ist), Variante 2 wird dir bestätigen dass es ein GIF ist, egal, welche Datei-Endung dranhängt
An den 1. Ansatz hatte ich auch gedacht. Aber wenn du mehrere User hast die auf das Excelsheet zugreifen können hast du dann ein Problem. Ich wollte mit einem Überprüfungs-Code verhindern, dass die User kein falsches Bildformat einsetzen.
Wie müsste man die Codes dazu schreiben? Wo fang ich am besten an?
 

Zvoni

Erfahrenes Mitglied
#4
Autsch! In deinem Szenario (Excel-Tabelle liegt auf einem Server?) hast du das Problem, obwohl die Excel-Datei selbst auf dem Server liegt, wenn die User diese öffnen, wird sie im Prozessraum des Users auf deren eigenem Rechner ausgeführt, und da kannst du in die Situation kommen wie beschrieben, bei dem einen User sind beide Dateitypen in der Registry registriert, beim anderen nicht.

Zu Variante 2:
Lies dir mal die Hilfe zur VBA Open-Funktion for Binary durch
hierzu brauchst du:
ein Byte-Array 0 To 10
Die Get-Funktion, um die Bytes aus der Datei in das Byte-Array zu lesen

Falls du weitere Hilfe brauchst, einfach schreien. :)
Das sind vielleicht 5-6 Zeilen an code

EDIT: Frage: Sind die Bilder in der Excel-Tabelle eingebettet, oder steht dort ein Pfadname?
 

Usen

Grünschnabel
#5
Korrekt! Das hast du richtig erkannt. (y)
Die User erstellen die Bilder mittels dem Snipping-Tool und kopieren diese in die Excel-Tabelle. Also um deine Frage zu beantworten: Die Bilder sind weder verlinkt, noch sind sie an einem festen Ort/Pfad gespeichert.

Ich denke es ist auch nicht viel zum Programmieren. Alternativ könnte ich mir vorstellen, dass ein Makro die eingesetzten Bilder in die gewünschten Formate (GIF,JPG) konvertiert. Allerdings weiß ich nicht ob das zu aufwendig ist. o_O
 

Zvoni

Erfahrenes Mitglied
#6
OH OH.
Snipping-Tool, ausschneiden/auswählen, dann auf Excel wechseln, und dann dort einfach einfügen?
Das ist eine ganz andere Baustelle.
Muss ich mich erstmal selbst schlau machen,
weil das ist weder GIF noch JPG.
Müsste BMP sein.
 

Usen

Grünschnabel
#7
Auch wieder korrekt! :D Ich bekomme wegen der verschiedenen Formate folgende Fehlermeldung:
1535112680644.png
Diese Meldung kommt in 5 facher Ausführung und ich finde auch nicht den Fehler im Quellcode.
 

Zvoni

Erfahrenes Mitglied
#8
hmmm...
hab jetzt mal testweise eine frische Mappe1.xlsx gestartet, per Snipping-Tool mal irgendwas reingeklatscht, als xlsx gespeichert.
Ich hab mir die XML's dann angeschaut, und siehe da: Scheint wohl Excel-Intern als PNG gespeichert zu werden.
Wenn ich ein JPG importiere (!) dann wird es intern auch als JPG gespeichert..... hmmmm

EDIT: Wird bis nächste Woche warten müssen (was mich betrifft).
Jetzt ist Wochenende, und ich habe MS Office erst wieder am Montag (auf Arbeit. Privat kommt mir kein Microsoft mehr über die Türschwelle)
 

Usen

Grünschnabel
#9
Alles klar (y), ich sehe es als ein kleines Projekt, das wir gemeinsam aufziehen können. Ich werde am Wochenende auch herumexperimentieren. Ich danke dir auf jeden Fall für deine Unterstützung und hoffe auf weitere Untersützung.

Schönes Wochenende! :D
 
Anzeige

Neue Beiträge

Anzeige