Dans Excel, je veux vérifier si une cellule spécifique par exemple "C12" a une image?
Comment pourrais-je faire cela? P>
6 Réponses :
Vous le faites en boucle via la collecte de formes de la feuille de calcul, à la recherche d'une forme dont .topleftcell code> a la même adresse que votre plage cible. P>
Est-il possible de vérifier si cette forme est une image ou une icône? parce qu'il y a différents types de formes
Y a-t-il également une manière plus directe de le faire, en utilisant une cellule et de le vérifier pour une image.
.Type code> La propriété vous donne le type. S'il vous plaît appuyez sur F2 dans l'IDE et examinez le modèle d'objet. Je n'ai jamais une nouvelle réponse à cette question, mais cela m'a fallu 10 secondes pour la regarder dans le navigateur d'objets.
For Each wShape In ActiveSheet.Shapes If (wShape.Type <> 13) Then wShape.Delete ' If the shape doesn't represent a Picture, ' delete Next wShape
Lorsque vous devez supprimer, vous devez démarrer en arrière à partir d'activesheet.shapes.count ou vous allez manquer certains. Aussi pour cet objectif, un simple asciveheet.pictures.delete code> ferait le tour en une ligne
J'ai eu une situation où je voulais supprimer des images (dans mes graphiques de cas) des cellules sélectionnées sur une feuille de calcul et laisser les autres en place, alors supprimez toutes les images n'était pas une option. J'ai laissé un certain débogage et un code supplémentaire pour dire à l'utilisateur ce qui se passe.
Public Sub RemoveUnWantedGraphs() Dim shp As Shape Dim rangeToTest As Range Dim c As Range Dim shpList 'Set the rangeToTest variable to the selected cells Set rangeToTest = Selection 'Loop Over the the selected cells For Each c In rangeToTest 'Inner loop to iterate over the shapes collection for the activesheet Set shpList = ActiveSheet.Shapes For Each shp In shpList Application.StatusBar = "Analysing:- " + c.Address + " Graphs To Find:- " & shpList.Count 'If the address of the current cell and the address 'of the shape are the same then delete the shape If c.Address = shp.TopLeftCell.Address Then Debug.Print "Deleting :- " & shp.Name shp.Delete DoEvents End If Next shp Next c Application.StatusBar = "" MsgBox "All Shapes In Range Deleted" End Sub
Cela ne peut pas fonctionner correctement (sauf lorsqu'il y a une image maximale dans la plage), lorsque vous supprimez, vous devez commencer à partir de la fin et accédez au premier pour i = activesheet.shapes.count à 1 étape -1 code >.
La solution la plus simple consiste à créer une fonction qui retournera 1 si l'image existe dans la cellule, 0 si elle ne le fait pas. Cela ne fonctionne que pour les cellules individuelles et les besoins modifiés pour des plages multi-cellules.
Sub testFunction() If CellImageCheck(Range("B6")) Then MsgBox "Image exists!" Else MsgBox "Image does not exist" End If End Sub
La fonction doit être booléenne et une fonction de sortie après avoir trouvé qu'une image serait arée, à la vitesse et à une réponse correcte (si la photo suivante de la collection de formes est nulle, la fonction répondrait à 0)
C'est tout à fait un vieux fil, alors ne savez pas si mon message aidera n'importe qui, mais j'ai rencontré un problème similaire aujourd'hui et après une solution dérivée.
J'ai d'abord stocké toutes les adresses de plage où l'objet existe, à un tableau, puis dans la deuxième partie du code, vérifiait chaque adresse de cellule dans ma plage sélectionnée pour l'objet contre chaque élément de matrice et effectué l'exécution du marquage à Une cellule offset si l'adresse de l'élément de tableau correspond à l'adresse de cellule active dans la plage sélectionnée. J'espère que ça aide. Voici le code: p>
L'approche de Juhi m'a aidé. Je pense qu'il y a un besoin implicite dans la question initiale d'appliquer cela à plusieurs cellules ou une plage contiguë ou même une feuille entière. Dans un tel cas, il est souhaitable de ne pas envisager chaque cellule séparément et boucle à chaque forme de la feuille de la feuille à plusieurs reprises pour toutes les cellules d'intérêt.
J'ai modifié un peu la fonctionnalité pour supprimer la boucle imbriquée et entrer du texte dans tout les cellules contenant une forme. Ceci est optimisé pour mon besoin immédiat où les données source sont une région cellulaire 4x40 où les cellules contiennent une forme ou rien du tout. Ma méthode n'entre pas «NON» pour les cellules qui ne contiennent aucune forme, mais il est facile d'entrer dans les cellules vides à la fin. P>
Sub MarkCellsWithShapes() Dim rng As Range, shp As Shape, n As Integer, arr() As String, m As Integer, arrm As Variant n = ActiveSheet.Shapes.Count ReDim arr(n) m = 1 For Each shp In ActiveSheet.Shapes arr(m) = shp.TopLeftCell.Address Range(arr(m)) = "Yes" m = m + 1 Next End Sub