VBA: ALternativtext finden
#1
Hallo!

Ich brauche mal wieder eure Hilfe zum Thema VBA.

Ich habe einen Zellbereich von G8 bis ZZ1000, in dem sich irgendwo ein Bild befindet.

=BILD("https://cdn-icons-png.flaticon.com/128/626/626013.png";"O";0)

Es wird also das Bild und als Alternativtext "O" ausgegeben.

Nun soll das Makro diesen Zellbereich durchsuchen und die Zelle mit dem Alternativtext "O" finden. Sofern sich in der Zelle darunter kein "-" befindet und im Tabellenblatt "#Parameter" Zelle B3 eine 1 enthält, soll das Makro nun darunter die Formel "=IMAGE(""https://cdn-icons-png.flaticon.com/128/626/626013.png"",""O"",0)" einfügen.

Mein Problem ist allerdings - dieser Code findet die Zelle nicht. Debug.Print kommt bis shapes. Kann ich den Alternativtext so gar nicht abfragen?


Code:
Option Explicit
Sub Abwärts()
    Dim wsHauptseite As Worksheet
    Dim wsParameter As Worksheet
    Dim shp As Shape
    Dim found As Boolean
   
    ' Arbeitsblätter festlegen
    Set wsHauptseite = ThisWorkbook.Sheets("Hauptseite")
    Set wsParameter = ThisWorkbook.Sheets("#Parameter")
   
    Debug.Print "Blätter festgelegt"
   
    ' Kontrolle ob Parameter B3 ist 1
    If wsParameter.Range("B3").Value = 1 Then
        found = False
       
        Debug.Print "Parameter B3 ist 1"
       
        ' Schleife durch Hauptseite
        For Each shp In wsHauptseite.Shapes
       
        Debug.Print "shapes"
       
            ' Kontrolle ob shapes Alternativtext ist O
            If shp.AlternativeText = "O" Then
                gefunden = True
               
            Debug.Print "Alternativtext ist O"
               
                ' Kontrolle ob in letzter Zeile
                If shp.TopLeftCell.Row < 1000 Then
                    ' Kontrolle ob Zelle darunter ist "-"
                    If wsHauptseite.Cells(shp.TopLeftCell.Row + 1, shp.TopLeftCell.Column).Value <> "-" Then
                        ' Bildformel einfügen
                        wsHauptseite.Cells(shp.TopLeftCell.Row + 1, shp.TopLeftCell.Column).Formula2 = "=IMAGE(""https://cdn-icons-png.flaticon.com/128/626/626013.png"",""O"",0)"
                    End If
                End If
               
                Exit For
            End If
        Next shp
       
        If Not found Then
            MsgBox "Kein Bild mit Alternativtext 'O' gefunden.", vbInformation, "Information"
        End If
    End If
   
    On Error GoTo 0
    Exit Sub
   
ErrorHandler:
    MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbExclamation, "Fehler"
End Sub 



Danke!
Antworten Top
#2
Hallo,

die per Formel eingefügten Bilder sind keine Shapes. Ich würde eher die Formel abfragen: ...Cells(x,y).Formula
Was dann =IMAGE(...) wäre und das ggf. nach dem Alternativtext parsen.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • Sabotaz
Antworten Top
#3
Hallo

mit dem kelinen Code kannst du wenigstens die Zelladresse der Bilder auflisten lassen.
Hilft dir das weiter?  Bei Worksheets(1) bitte DEIN Worksheet angeben!  Bin gespannt obs klappt.

mfg 
Gast 123

Code:
Sub Objekte_auflisten()
With Worksheets(1)
    Zahl = .DrawingObjects.Count
    On Error Resume Next
    For j = 1 To Zahl
        Cells(j + 2, 2) = .DrawingObjects(j).Name
        Cells(j + 2, 3) = .DrawingObjects(j).Text
        Cells(j + 2, 4) = .DrawingObjects(j).TopLeftCell.Address
    Next j
End With
End Sub
Antworten Top
#4
Klingt einfach. So weit habe ich nicht gedacht. Ich habe es probiert und es funktioniert! Danke vielmals.

ich hab jetzt den Bereich mit der Zeile ergänzt, statt dass er direkt nach dem O sucht:


  
Code:
    For Each cell In searchRange
        If cell.Formula Like "=IMAGE(""*.png"",""O"",0)" Then

          

Aber kann man denn nicht direkt nach Alternativtext suchen? Da muss es doch irgendeine Methode geben eigentlich...


Danke @Gast123, aber das würde mir in meinem Fall nicht weiterhelfen. Ich weiß noch nicht, wie viele Bilder es geben wird :D
Antworten Top
#5
Hallo

wenn du schon einen funktionierenden Code hast, dann mach doch da weiter.
z.B. mit - If Instr(Cell.Formula, "Alternativtext") then .....

Du kannst auch die Zelle direkt anspringen, sofern es nicht 1000 Bilder oder mehr sind.
Ich kenne deine Datei ja nicht, kann es nicht abschätzen.

mfg
Gast 123

Nachtrag   du kannst dir Cell.Formula auch in einer Tabelle auflisten und dir das Ergebnis ansehen
Mit Top, Left, Width, Height kannst du auch die Bildgrösse und den Platz auf dem Bildschirm sehen.
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Sabotaz
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste