Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bildgröße aus den Bildeigenschaften auslesen?

Forumthread: Bildgröße aus den Bildeigenschaften auslesen?

Bildgröße aus den Bildeigenschaften auslesen?
12.02.2007 13:09:54
Kasimir
Hallo Leute,
ich hoffe, Ihr könnt mir weiterhelfen. Ich möchte über ein Dialogfeld ein Bild in ein Tabellenblatt einlesen. Vor dem Einlesen möchte ich aber die Bildbreite und –höhe auslesen, weil das Bild nur eine bestimmte Pixelgröße haben darf. Nun habe ich in der Recherche ein Makro von K.Rola gefunden, das die Eigenschaften von Bildern ausließt. Das habe ich wie folgt abgeändert:

Sub Bildeigenschaften_abfragen()
Const STRFOLDER As String = "C:\Eigene Dateien\Bilder"
Dim objShell As Object, objFolder As Object
Dim varName
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
For Each varName In objFolder.Items
If varName = "Bild.JPG" Then
Breite = objFolder.GetDetailsOf(varName, 27)
Höhe = objFolder.GetDetailsOf(varName, 28)
Exit For
End If
Next
MsgBox Breite & " , " & Höhe
End Sub

Das Makro funktioniert auch soweit. Nun möchte ich aber nicht immer von einem fest vorgegebenen Bild die Eigenschaften auslesen, sondern möchte das Bild über ein Dialogfenster auswählen. Das kann man ja mit den Codezeilen
Name_des_Bildes = Application.GetOpenFilename( _
"Bilddateien (*.JPG), *.xls, Alle Dateien (*.*), *.*", 1, _
"Bild auswählen...", MultiSelect:=False)

realisieren. Nur wie bekomme ich denn nun aus der Variablen "Name_des_Bildes" heraus, was der Pfad und was der Bildname ist, damit ich diese Zeilen im obigen Makro anwenden kann. Wie bekomme ich also den Pfad und den Namen aus der Variablen herausgefiltert? Weiß das jemand.
Danke Euch,
Kasimir
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bildgröße aus den Bildeigenschaften auslesen?
12.02.2007 13:36:44
Rudi
Hallo,

Sub tt()
Dim Name_des_Bildes As String, strName As String, strPfad As String
Name_des_Bildes = Application.GetOpenFilename( _
"Bilddateien (*.JPG), *.xls, Alle Dateien (*.*), *.*", 1, _
"Bild auswählen...", MultiSelect:=False)
strPfad = Left(Name_des_Bildes, InStrRev(Name_des_Bildes, "\") - 1)
strName = Replace(Name_des_Bildes, strPfad & "\", "")
End Sub

Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
Anzeige
Wie kombiniere ich beide Makros?
12.02.2007 14:02:35
Kasimir
Hallo Rudi,
danke Dir für Deine Hilfe. Genau so meinte ich es. Nur nun hänge ich daran, die beiden Makros miteinander zu kombinieren. Ich habe das mal folgendermaßen zusammengefast:

Sub Dateieigenschaften()
'Const STRFOLDER As String = "H:\Daten Dannenberg\Programmbilder"
Dim objShell As Object, objFolder As Object
Dim varName
Dim Name_des_Bildes As String, strName As String, strPfad As String
Name_des_Bildes = Application.GetOpenFilename( _
"Bilddateien (*.JPG), *.xls, Alle Dateien (*.*), *.*", 1, _
"Bild auswählen...", MultiSelect:=False)
strPfad = Left(Name_des_Bildes, InStrRev(Name_des_Bildes, "\") - 1)
strName = Replace(Name_des_Bildes, strPfad & "\", "")
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(strPfad)
For Each varName In objFolder.Items
If varName = strName Then
Breite = objFolder.GetDetailsOf(varName, 27)
Höhe = objFolder.GetDetailsOf(varName, 28)
Exit For
End If
Next
If Breite > "150 Pixel" Then
MsgBox "Die maximale Bildgröße darf 150 x 150 Pixel nicht überschreiten. Das von Ihnen ausgewählte " _
& "Bild hat aber eine Größe von " & Breite & " x " & Höhe & ". Das Bild wird nicht eingelesen", vbCritical, _
"Fehler Breite..."
Exit Sub
End If
If Höhe > "150 Pixel" Then
MsgBox "Die maximale Bildgröße darf 150 x 150 Pixel nicht überschreiten. Das von Ihnen ausgewählte " _
& "Bild hat aber eine Größe von " & Breite & " x " & Höhe & ". Das Bild wird nicht eingelesen", vbCritical, _
"Fehler Höhe..."
Exit Sub
End If
End Sub


Leider funktioniert das nicht. Es kommt ein Laufzeitfehler 91 "Objektvariable oder with-Blockvariable nicht festgelegt" und die Zeile
For Each varName In objFolder.Items
wird gelb markiert. Wieso denn? Jemand einen Tip für mich?
Gruß,
Kasimir
Anzeige
AW: Bildgröße aus den Bildeigenschaften auslesen?
12.02.2007 13:53:59
Hans
Hallo Kasimir,
Rudi hat recht, aber ich merke gerade das das Shell-Objekt so seine Tücken hat. Eine Stringvariable wird wohl nicht anerkannt, also als Komplettcode:

Sub Bildeigenschaften_abfragen()
Const STRFOLDER As String = "C:\Bilder"
Dim objShell As Object, objFolder As Object
Dim varName As Object
Dim Breite As Variant, Höhe As Variant, Name_des_Bildes As Variant
Dim sPath As Variant, sFile As String
Name_des_Bildes = Application.GetOpenFilename( _
"Bilddateien (*.JPG), *.xls, Alle Dateien (*.*), *.*", 1, _
"Bild auswählen...", MultiSelect:=False)
If Name_des_Bildes = False Then Exit Sub
sFile = Dir(Name_des_Bildes)
sPath = Replace(Name_des_Bildes, sFile, "")
sPath = Left(sPath, Len(sPath) - 1)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(sPath)
For Each varName In objFolder.Items
If varName = sFile Then
Breite = objFolder.GetDetailsOf(varName, 27)
Höhe = objFolder.GetDetailsOf(varName, 28)
Exit For
End If
Next
MsgBox Breite & " , " & Höhe
End Sub

gruss hans
Anzeige
Funktioniert bestens, danke!
12.02.2007 14:08:18
Kasimir
Hall Hans,
danke Dir für Deine Lösung. Genau das war's. Das mit der Variablen ist mir auch aufgefallen, da immer ein Laufzeitfehler aufgetreten ist wenn ich beide Makros miteinander kombiniert hatte, ich aber nicht wusste warum. Damit ist auch meine neue Frage erledigt und das Thema kann geschlossen werden.
Danke nochmal an Euch beide und einen schönen Tag noch,
Kasimir
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Bildgröße aus den Bildeigenschaften auslesen in Excel


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den Visual Basic-Editor zu starten.

  2. Neues Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen -> Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

Sub Bildeigenschaften_abfragen()
    Dim objShell As Object, objFolder As Object
    Dim varName As Object
    Dim Breite As Variant, Höhe As Variant
    Dim Name_des_Bildes As Variant
    Dim sPath As Variant, sFile As String

    Name_des_Bildes = Application.GetOpenFilename( _
    "Bilddateien (*.JPG), *.xls, Alle Dateien (*.*), *.*", 1, _
    "Bild auswählen...", MultiSelect:=False)

    If Name_des_Bildes = False Then Exit Sub
    sFile = Dir(Name_des_Bildes)
    sPath = Replace(Name_des_Bildes, sFile, "")
    sPath = Left(sPath, Len(sPath) - 1)

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(sPath)

    For Each varName In objFolder.Items
        If varName = sFile Then
            Breite = objFolder.GetDetailsOf(varName, 27)
            Höhe = objFolder.GetDetailsOf(varName, 28)
            Exit For
        End If
    Next

    MsgBox Breite & " , " & Höhe
End Sub
  1. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle Bildeigenschaften_abfragen und klicke auf Ausführen.

  2. Bild auswählen: Ein Dialogfeld öffnet sich, in dem Du das Bild auswählen kannst. Die Breite und Höhe des Bildes werden in einer MessageBox angezeigt.


Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Dieser Fehler tritt auf, wenn die objFolder-Variable nicht richtig gesetzt ist. Stelle sicher, dass der Pfad korrekt ist und das Bild existiert.

  • Falsches Bildformat: Achte darauf, dass das Bild im richtigen Format (.JPG) vorliegt. Andernfalls wird die Bildgröße nicht korrekt ausgelesen.

  • Variablen nicht definiert: Überprüfe, ob alle Variablen im Code korrekt deklariert sind. Achte besonders auf den Datentyp der Variablen.


Alternative Methoden

Du kannst auch die FileSystemObject-Bibliothek verwenden, um die Bildeigenschaften auszulesen. Hier ist ein Beispielcode:

Sub Bildeigenschaften_FileSystem()
    Dim fso As Object
    Dim file As Object
    Dim Name_des_Bildes As String

    Name_des_Bildes = Application.GetOpenFilename("Bilddateien (*.JPG), *.xls, Alle Dateien (*.*), *.*", 1, "Bild auswählen...", MultiSelect:=False)

    If Name_des_Bildes = False Then Exit Sub

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.GetFile(Name_des_Bildes)

    MsgBox "Bildgröße: " & file.Size & " Bytes"
End Sub

Praktische Beispiele

  1. Bildgröße überprüfen: Du kannst das oben genannte Makro erweitern, um eine Überprüfung der Bildgröße vorzunehmen, bevor das Bild in die Excel-Tabelle eingefügt wird.

  2. Erweiterte Bildeigenschaften: Wenn Du weitere Informationen zu den Bildeigenschaften auslesen möchtest, kannst Du die Indizes in GetDetailsOf ändern, um zusätzliche Eigenschaften wie Datum der letzten Änderung zu erhalten.


Tipps für Profis

  • Fehlerbehandlung implementieren: Füge On Error Resume Next und On Error GoTo 0 ein, um Fehler abzufangen und den Code robuster zu machen.

  • Benutzerdefinierte Dialoge: Anstelle des Standard-Dialogfelds kannst Du eigene Formulare erstellen, um die Benutzererfahrung zu verbessern.

  • Automatisierung: Automatisiere den Prozess, indem Du das Makro so anpasst, dass es automatisch ausgeführt wird, wenn eine bestimmte Aktion in Excel erfolgt (z. B. beim Öffnen der Datei).


FAQ: Häufige Fragen

1. Frage
Wie kann ich die Bildgröße in Pixeln anzeigen?
Die Bildgröße wird standardmäßig in Bytes angezeigt. Du kannst die Breite und Höhe mit den Indizes 27 und 28 auslesen, um die Dimensionen in Pixeln anzuzeigen.

2. Frage
Kann ich auch andere Bildformate einlesen?
Ja, Du kannst den Filter im GetOpenFilename-Aufruf anpassen, um andere Formate wie PNG oder BMP zu unterstützen. Achte jedoch darauf, die Indizes für die Eigenschaften entsprechend zu ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige