Excel VBA supprimer toute la ligne, si la cellule dans la colonne D est vide
Quelqu'un peut me guider à travers la façon d'écrire un script pour supprimer la totalité de la ligne si une cellule dans la colonne D = "" sur la feuille 3 dans la gamme D13:D40.
Aussi, comment faire pour éviter à l'utilisateur accidentellement en cours d'exécution à nouveau le script une fois que ces cellules dans la plage sont déjà supprimés et d'autres cellules sont maintenant sur la D13:D40 gamme?
- Pouvez-vous partager une partie de votre code? De cette façon, il peut être plus facile pour vous aider.
- Vous voulez seulement le code à exécuter une seule fois? Le code sera activé à partir d'un bouton sur la feuille de calcul?
- désolé, je n'ai pas de code, j'ai fait des recherches sur le web mais ne savez pas vraiment comment modifier le code VBA.
- tu m'as eu! Exécuter qu'une seule fois et de la forme activée d'un bouton. Est-ce possible?
Vous devez vous connecter pour publier un commentaire.
Solution: C'est de travailler pour moi:
Explication: Exécuter un
for
boucle dans toutes les cellules de votreRange
dans la colonne D et de supprimer la totalité de la ligne si la valeur de la cellule est vide. Important: Lorsqu'une boucle à travers les lignes et la suppression de certains d'entre eux en fonction de leur contenu, vous devez boucle en arrière, pas avant. Si vous allez de l'avant et vous supprimez une ligne, toutes les lignes suivantes obtenir un autre numéro de ligne (-1). Et si vous avez deux cellules vides à côté de l'autre, seule la ligne de la première sera supprimé parce que la deuxième est un déplacement d'une ligne vers le haut, mais la boucle continue à la ligne suivante.Pas besoin de boucles:
Utilisation
AutoFilter
de trouver des cellules vides, et ensuite utiliserSpecialCells
pour supprimer les résultats. Utilise unStatic
variable pour garder une trace de quand la procédure a été exécutée.Voici mon prendre sur elle. Voir les commentaires dans le code pour ce qui se passe le long du chemin.
Pour empêcher un utilisateur d'exécuter du code par accident, je serais probablement juste ajouter
Option Private Module
en haut du module, et protéger par mot de passe VBA-projet, mais là encore, il n'est pas que facile à exécuter par accident dans la première place.Ce code s'exécute via un bouton sur la feuille qui, une fois exécuté, supprime le bouton de la feuille de calcul de sorte qu'il ne peut pas être exécuté.
Vous aurez besoin d'ajouter un bouton à votre feuille de calcul et affecter la macro à elle.
Il n'est pas nécessaire pour les boucles ou les filtres pour trouver les cellules vides dans la Plage spécifiée. La Gamme.SpecialCells propriété peut être utilisée pour trouver toutes les cellules vides dans la Plage couplée à la Gamme.EntireRow propriété pour supprimer ces. Afin de préserver l'état d'exécution, le code ajoute un Commentaire à la première cellule de la plage. Cela permettra de préserver l'état d'exécution, même si le Classeur est fermé (en supposant qu'il a été enregistré).
J'ai récemment eu à écrire quelque chose de semblable. Je ne suis pas sûr que le code ci-dessous est terriblement professionnel, car il implique de stocker une valeur dans la cellule J1 (évidemment, cela peut être changé), mais il va faire le travail dont vous avez besoin. J'espère que cela aide:
If vbYes
-déclaration...Long
, jamaisInteger
.