Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bilder die mit PlacePictureInCell integriert wurden, finden
#1
Hi Zusammen,
ich hab eine Exceldatei bei der in Spalte A in machen zellen ein Bild eingefügt wurde mit
Code:
PlacePictureInCell

die anderen Zellen sind leer. Es gibt auch keine Bilder die anders integriert wurden.

Nun möchte ich eine Schleife Programmieren, der die Zellen in Spalte A durchgeht und wenn diese ein Bild enthält soll eine MSGBox mit einer meldung geben.

Kennt da jemand eine Möglichkeit?
Zitieren
#2
Hallo,

ist mir ein wenig zu wenig Information, was du da gibst.

Ich kann mir nicht vorstellen, das die MsgBox der Wahrheit letzter Schluss sein soll ...

Wie die Schleife aufgebaut ist, hängt immer ein wenig davon ab, was genau passieren soll.
_________
VG Sabina
Zitieren
#3
Hi,

ist zwar nicht 100%, aber idR reicht die Prüfung auf HasRichDataType. Für C übergibst Du die Zelle, die überprüft werden soll.

Code:
Function BildInZelle(C As Range)
If C.HasRichDataType Then
    BildInZelle = True
End If
End Function


VG, Boris
Zitieren
#4
(21.02.2025, 16:13)Flotter Feger schrieb: Hallo,
ist mir ein wenig zu wenig Information, was du da gibst.
Ich kann mir nicht vorstellen, das die MsgBox der Wahrheit letzter Schluss sein soll ...
Wie die Schleife aufgebaut ist, hängt immer ein wenig davon ab, was genau passieren soll.

Hintergrund ist, dass ich eine Excelliste mit Artikelnummern habe in welche fehlenden Bilder integriert werden sollen. Da viele mit unterschiedlichen Kenntnisstand in dem Excel arbeiten, sind einige Bilder mit "PlacePictureInCell" und andere mit .AddPicture integriert. Meine Aufgabe ist es nun die fehlenden Bilder zu integrieren. D. h. ich muss wissen ob in einer Zelle bereits ein Bild vorhanden ist.


Daher nein - die MSGBox ist nicht das Ende. Es ist nur der Platzhalter für weitere Auswertungen, die ich dann machen muss.
Zitieren
#5
@ Boris
Dank deines Hinweises hab ich nun dein anderen Post bei herber.de gefunden. Sehr interessant. 

C.HasRichDataType empfinde ich als "unbefriedigende" Lösung, da diese darauf beruht das wahrscheinlich keiner in einer Bilderliste Aktien, Geodaten oder andere Verknüpfungen integriert hat.

Ich werde, sollte nicht noch eine andere Idee kommen, vermutlich es so lösen, das ich in einer Schleife die "Shapes"-Namen auslese und in einem Array (AltArray) speichern. Dann werde ich in einer zweiten Schleife auf alle Zellen das PlacePictureOverCells anwenden. Und dann in einer 3. Schleife schauen, welche "Shapes"-Namen neu dazugekommen sind, und speichere die in einem anderen Array (NeuArray) ab. Und nach meinen restlichen Bearbeitungen werde ich dann die Bilder die im "NeuArray" stehen mit einer 3. Schleife wieder mit PlacePictureInCell in die Zellen „zurück“integrieren.

Grüße
Zitieren
#6
Hi,

bevor Du das machst, würde ich es erstmal mit HasRichDataType versuchen. Für mich hat das voll und ganz ausgereicht.
Zitieren
#7
Oder ein Mix. Ich hab mal ein Beispielcode geschrieben der aus dem Blatt alle Bilder löschen soll. Ob Integriert mit InsertPictureInCell bzw. PlacePictureInCell oder eben nicht (AddPicture/Pictures.Insert) ist dabei egal:

Code:
Sub PiXremove()
    Dim xC As Range
    For Each xC In Range(Cells(1, 1), Cells(LetzteZeile, LetzteSpalte))
        If xC.HasRichDataType Then
            xC.PlacePictureOverCells
        End If
    Next
   
    If ActiveSheet.Shapes.Count > 0 Then
        ActiveSheet.Shapes.SelectAll
        Selection.Delete
    End If
End Sub

Function LetzteSpalte() As Long
   LetzteSpalte = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
End Function

Function letzteZeile() As Long
   letzteZeile =  ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
End Function

Darauf werde ich den rest dann aufbauen.

Hab auch mal die Zeit gestoppt. Wenn man den HasRichDataType abfrägt wenn man ein Tabellenblat Scannt (wo die meisten Zellen keine Bilder enthalten) dann ist der Code etwas schneller als wenn man einfach auf alle Zellen nur das PlacePictureOverCells anwendet.
Zitieren
#8
Noch etwas, falls jemand dasselbe Problem hat...

Ich hab in einer Schleife Mehrere Bilder die schon in einem Excelfile sind mit ActiveSheet.Shapes(Selection.Name).PlacePictureInCell in die Zellen einbetten wollen.

Der Code lief und machte alles richtig solang der Editor auf war. War der Editor geschlossen stürzte Excel ab. Die Lösung war es in eine .HasRichDataType Abfrage zu packen.

Code:
                If Cells(zaEhler, bildSpalte).HasRichDataType Then
                    Selection.ShapeRange.PlacePictureInCell
                End If

Dann lief der Code auch ohne offenen Editor.
Zitieren
#9
Um die Dokumentation abzuschließen:
Ohne das
Code:
If Cells(Zeile, Spalte).HasRichDataType Then
...
end if

drumrum gebaut wird, führt bei eienem vorher Selektierten Bild ActiveSheet.Shapes(Selection.Name).PlacePictureInCell zu einem Absturz und Selection.PlacePictureInCell oder Selection.ShapeRange.PlacePictureInCell zu einem Laufzeitfehler 438.
Zitieren


Gehe zu:


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




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions