Anzeige
Archiv - Navigation
1956to1960
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

Viele Bilder in Tabelle einfügen

Viele Bilder in Tabelle einfügen
07.12.2023 15:24:33
danjalll
Hallo,

habe schon des öfteren Beiträge aus dem Forum verwendet um Makros zu basteln. Muss jetzt das erste Mal selber eine Frage stellen.
Ich habe mit meinem Halbwissen + Google + Makroaufzeichnen ein Makro gebastelt das meine Anforderungen so halb erfüllt.
Es geht darum, Bilder (so 30 - 50) aus einem Verzeichnis in ein Tabellenblatt zu laden (2 bilder nebeneinander, viele untereinander)
Code hier:
Sub BilderImportieren()

Dim selectedFolder As String
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim ws As Worksheet
Dim imgLeft As Integer
Dim imgTop As Integer
Dim imgWidth As Double
Dim imgHeight As Double
Dim imgCount As Integer
Dim pic As Picture
Dim startRow As Integer
Dim rowOffset As Integer

With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Ordner mit Bildern auswählen"
If .Show = -1 Then
selectedFolder = .SelectedItems(1)
Else
Exit Sub
End If
End With

On Error Resume Next
Set ws = Worksheets("Bilder")
On Error GoTo 0
If ws Is Nothing Then
Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Bilder"
End If

imgLeft = 1
imgTop = 1
imgWidth = 400
imgHeight = 300
imgCount = 0
startRow = 1
rowOffset = 22 ' Zeilenabstand
columnOffset = 8 ' Spaltenabstand

Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExists(selectedFolder) Then
MsgBox "Der ausgewählte Ordner wurde nicht gefunden.", vbExclamation
Exit Sub
End If

Set objFolder = objFSO.GetFolder(selectedFolder)

For Each objFile In objFolder.Files
If InStr(1, LCase(objFile.Name), ".jpg") > 0 Or InStr(1, LCase(objFile.Name), ".jpeg") > 0 Or InStr(1, LCase(objFile.Name), ".png") > 0 Then
' Füge das Bild in die Excel-Tabelle ein
Set pic = ws.Pictures.Insert(objFile.Path)
With pic
.Left = ws.Cells(imgTop, imgLeft).Left
.Top = ws.Cells(imgTop, imgLeft).Top
.ShapeRange.LockAspectRatio = msoTrue
.ShapeRange.Width = imgWidth
.ShapeRange.Height = imgHeight
End With

imgCount = imgCount + 1
' Koordinaten für nächstes bild
If imgCount Mod 2 = 0 Then
startRow = startRow + rowOffset
imgTop = startRow
imgLeft = 1

Else
imgLeft = columnOffset
End If

If imgCount Mod 4 = 0 Then
ws.HPageBreaks.Add Before:=ws.Cells(startRow, 8)
ws.VPageBreaks.Add Before:=ws.Cells(startRow, 14)
End If


End If
Next objFile
End Sub


Das funktioniert prinzipiell ganz gut. Das problem ist jetzt, sollte ein bild gedreht sein, also höher als breit, zerlegt es mir die ganze anordnung.
Aktuell habe ich keine Idee wie ich das abfangen bzw. alles so umstrukturieren soll, dass es in beiden fällen gut aussieht.

Ich hoffe, dass hier jemand eine Idee hat.

Danke und viele Grüße

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Viele Bilder in Tabelle einfügen
08.12.2023 06:57:03
ralf_b
prüfe beim zweiten Bild in der Zeile welches der beiden die größte Höhe hat und ordne sie entsprechend deiner Vorstellungen.
AW: Viele Bilder in Tabelle einfügen
08.12.2023 08:49:59
danjalll
Durch deine Antwort bin ich auf die Idee gekommen, das Bild einfach um 90 Grad zu drehen. Die Größe an sich ist ja immer gleich
Gibt es dafür in VBA eine Möglichkeit zuerst zu prüfen wie hoch und breit das Bild ist, und dann zu drehen?
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige