Hi Zusammen,
ich hab eine Exceldatei bei der in Spalte A in machen zellen ein Bild eingefügt wurde mit
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?
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.
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
(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.
@ 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
Hi,
bevor Du das machst, würde ich es erstmal mit HasRichDataType versuchen. Für mich hat das voll und ganz ausgereicht.
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.
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.
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.