Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bildnamen auslesen

Bildnamen auslesen
16.11.2016 22:29:21
Oisse
Hallo Zusammen
und Danke schon mal im voraus.
Ich habe ein Spalte I immer wieder mal Bilder eingefügt.
Nun möchte ich gerne den Namen dieser Bilder ermitteln, damit ich sie eventuell drehen kann.
Dazu will ich die Zeile, in der sich das Bild befindet gerne mittels Inputbox angeben können.
Bisher habe ich Folgendes:
Sub Linksherum_Klick()
Dim wks_Re As Worksheet
Dim objShp As Shape         
Dim i As Long
Set wks_Re = ThisWorkbook.Worksheets("Newsletter")
Set i = InputBox("Welche Zeile?", "Zeile")
Bild = wks_Re.Cells(i, 9).Name
Set objShp = Sheets("Newsletter").Shapes(Bild)
 objShp.Rotation = objShp.Rotation - 90 'Set objShp = Nothing
End Sub

Kann jemand bitte helfen
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: nur ein Bsp
16.11.2016 23:33:00
Fennek
Hallo,
vothin habe ich für eine andere Frage diesen code gepostet:

Sub sh_name()
Dim Sh As Shape
Dim Pi(2) As String
For Each Sh In ActiveSheet.Shapes
If InStr(1, Sh.Name, "Pict") > 0 Then
Pi(i) = Sh.Name
i = i + 1
End If
Next Sh
ActiveSheet.Shapes.Range(Pi).Select
Selection.Copy
Sheets("Tabelle2").Paste
End Sub
So ganz passt es nicht auf deine Frage, aber immerhin ein Anfang.
mfg
Anzeige
AW: nur ein Bsp
17.11.2016 08:05:24
Oisse
Hallo Fennek und Danke für die Antwort.
Ich habe jetzt den Code so weit, dass ich das Bild drehen kann.
Allerdings habe ich noch das Problem, dass es sich nach der rechten oberen Ecke ausrichten soll.
Wie kriege ich das hin. Denn einmal ist es Querformat und einmal Hochformat.
Bisher sieht mein Code so aus:
Sub Linksherum_Klick()
Dim wks_Re As Worksheet
Dim objShp As Shape         'source-Shape-Objekt
Dim i As Long
Dim Bild As String
Set wks_Re = ThisWorkbook.Worksheets("Newsletter")
i = InputBox("Welche Zeile?", "Zeile")
For Each objShp In ActiveSheet.Shapes
If objShp.TopLeftCell.Row = i Then
objShp.Rotation = objShp.Rotation - 90
objShp.Left = Columns(9).Left
objShp.Left = Application.CentimetersToPoints(14.5)
objShp.Top = Rows(i).Top: Exit For
End If
Next objShp
End Sub

Allerdings bezieht sich das CentimeterToPoints ja auf den linken Bilschirmrand.
Ich hätte es ja gerne in Abhängigkeit vom Zellenrand, bzw eben am rechten oberen Eck und zwar egal ob Quer- oder Hochformat.
Irgendeine Idee?
Gruß Oisse
Anzeige
AW: Für Bilder drehen...
17.11.2016 09:57:42
Oisse
Servus Case und Danke für die Antwort.
Das mit dem Drehen klappt schon. Nur das Ausrichten an der oberen rechten Ecke der Zelle noch nicht.
Gruß Oisse
AW: Für Bilder drehen...
20.11.2016 08:40:06
Peter
Hallo Oisse,
ich habe das Makro von Case ergänzt. Das gedrehte Bild wird damit in die linke obere Ecke (nach A1) versetzt. Du kannst auch eine beliebige andere Zelle für das Einfügen im Code angeben.
https://www.herber.de/bbs/user/109570.xlsm
M.f.G. Peter Kloßek
Anzeige
AW: Für Bilder drehen...
21.11.2016 18:06:21
Oisse
Hallo Peter,
danke für Deine Ergänzung.
MfG
Oisse
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Bildnamen auslesen und Bilder drehen in Excel


Schritt-für-Schritt-Anleitung

Um die Namen von Bildern in einer Excel-Tabelle auszulesen und die Bilder zu drehen, kannst Du folgendes VBA-Makro verwenden. Es ermöglicht Dir, die Zeile über eine Inputbox anzugeben.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und dann auf Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code ein:

    Sub Linksherum_Klick()
        Dim wks_Re As Worksheet
        Dim objShp As Shape
        Dim i As Long
        Set wks_Re = ThisWorkbook.Worksheets("Newsletter")
        i = InputBox("Welche Zeile?", "Zeile")
    
        For Each objShp In ActiveSheet.Shapes
            If objShp.TopLeftCell.Row = i Then
                objShp.Rotation = objShp.Rotation - 90
                objShp.Left = Columns(9).Left
                objShp.Top = Rows(i).Top: Exit For
            End If
        Next objShp
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem Du ALT + F8 drückst und Linksherum_Klick auswählst.


Häufige Fehler und Lösungen

  • Fehler: "Objektvariable nicht gesetzt"

    • Lösung: Stelle sicher, dass Du die richtige Arbeitsblattanzeige verwendest und dass das Arbeitsblatt "Newsletter" existiert.
  • Fehler: Bild wird nicht gedreht

    • Lösung: Überprüfe, ob das Bild tatsächlich in der angegebenen Zeile ist.
  • Bildposition ist nicht korrekt

    • Lösung: Ändere die Zuweisung von objShp.Top und objShp.Left, um die Position an die Zelle anzupassen.

Alternative Methoden

Eine alternative Methode, um mehrere Bilder auszulesen, ist die Nutzung einer Schleife, die alle Shapes in einem Arbeitsblatt durchläuft. Hier ist ein Beispiel:

Sub sh_name()
    Dim Sh As Shape
    Dim Pi(2) As String
    Dim i As Integer
    i = 0

    For Each Sh In ActiveSheet.Shapes
        If InStr(1, Sh.Name, "Pict") > 0 Then
            Pi(i) = Sh.Name
            i = i + 1
        End If
    Next Sh
    ActiveSheet.Shapes.Range(Pi).Select
    Selection.Copy
    Sheets("Tabelle2").Paste
End Sub

Diese Methode hilft, mehrere Bilder gleichzeitig zu kopieren und in ein anderes Arbeitsblatt einzufügen.


Praktische Beispiele

Wenn Du das Bild in der oberen rechten Ecke einer Zelle ausrichten möchtest, kannst Du den Code wie folgt anpassen:

Sub Linksherum_Klick()
    Dim wks_Re As Worksheet
    Dim objShp As Shape
    Dim i As Long
    Set wks_Re = ThisWorkbook.Worksheets("Newsletter")
    i = InputBox("Welche Zeile?", "Zeile")

    For Each objShp In ActiveSheet.Shapes
        If objShp.TopLeftCell.Row = i Then
            objShp.Rotation = objShp.Rotation - 90
            objShp.Left = Cells(i, 9).Offset(0, -1).Left + Cells(i, 9).Width - objShp.Width
            objShp.Top = Rows(i).Top
            Exit For
        End If
    Next objShp
End Sub

Dieses Beispiel stellt sicher, dass das Bild an der rechten oberen Ecke der Zelle ausgerichtet wird.


Tipps für Profis

  • Verwende benannte Bereiche: Wenn Du regelmäßig mit bestimmten Bildbereichen arbeitest, kann es hilfreich sein, benannte Bereiche zu verwenden, um die Wartung des Codes zu erleichtern.
  • Fehlerbehandlung hinzufügen: Implementiere Fehlerbehandlungsroutinen, um Probleme während der Codeausführung zu identifizieren und zu lösen.
  • Makros dokumentieren: Halte eine Dokumentation über Deine Makros, um die Nachvollziehbarkeit und Wartbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Kann ich die Bilder in eine andere Arbeitsmappe kopieren?
Ja, Du kannst die Shapes in eine andere Arbeitsmappe kopieren, indem Du das Zielarbeitsblatt in Deinem Code angibst.

2. Was mache ich, wenn die Inputbox nicht angezeigt wird?
Stelle sicher, dass Du das Makro korrekt ausführst. Manchmal kann es an den Excel-Einstellungen liegen, die Makros blockieren.

3. Ist dieser Code in Excel 365 kompatibel?
Ja, der Code sollte in Excel 365 sowie in anderen Versionen von Excel funktionieren, die VBA unterstützen.

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