ActiveCell.Décalage De La Confusion
Je lisais quelques VBA dans un module quelqu'un avait écrit et suis tombé sur quelque chose qui me confond:
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Je me demandais comment le ActiveCell.Offset(ligne,colonne).Range().Sélectionnez la ligne travaillé. Dans ce cas, le "Début" de la gamme est une cellule, A18, et le décalage des décalages par une ligne, ce que j'ai. Mais je ne suis pas la suite ou comment ce qui le Range("A1") est inséré à faire ici.
Ne serait pas
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Select
de travailler et d'être moins confus? Est-il une raison quelconque, le Range("A1") de la clause est insérée?
Merci beaucoup, et désolé pour cette question de débutant.
Oui, il fonctionne de la même et être moins à confusion. 🙂
Merci Rory! Toute réflexion sur le Range("A1") de la partie alors et pourquoi il remplit toujours la même fonction?
Voir la réponse de @chancea de comment cela fonctionne. Comme pour le pourquoi: il est mis en place par l'enregistreur de macro si vous avez "l'utilisation des références relatives' option cochée lors de l'enregistrement de la macro.
Merci Rory! Toute réflexion sur le Range("A1") de la partie alors et pourquoi il remplit toujours la même fonction?
Voir la réponse de @chancea de comment cela fonctionne. Comme pour le pourquoi: il est mis en place par l'enregistreur de macro si vous avez "l'utilisation des références relatives' option cochée lors de l'enregistrement de la macro.
OriginalL'auteur mburke05 | 2015-03-18
Vous devez vous connecter pour publier un commentaire.
Réponse courte
Oui dans ce cas particulier à la fois faire de même. Retrait
Range("A1")
est fine.Longue Réponse
Cela est dû au fait que vous utilisez
ActiveCell
dans cette ligne:La
ActiveCell
est la première cellule au sein de la gamme vous avez sélectionné.Envisager la macro suivante:
Quelle que soit la plage vous sélectionnez cette option affichera l'adresse de l' de globules blancs au sein de la sélection.
c'est à dire
La
ActiveCell
est$A$4
Exemple
Appel
Offset(1,0)
sur un seule cellule ne offset que la cellule. Donc, si on regarde votre code d'origine:Supposons que ma précédente sélection (
A2:B4
) est la plage nommée "Démarrer" et nous pouvons marcher à travers exactement ce qui se passe:Dans cet exemple
Range("Start").Select
sélectionnez la gammeA2:B4
. Rendant ainsiActiveCell
égal àA2
.Ensuite nous appeler
Offset(1,0)
surActiveCell
qui est équivalent àRange("A2").Offset(1,0)
nous mettre à portéeA3
(1 ligne ci-dessous A2)Maintenant que nous appelons
.Range("A1")
qui va saisir le première cellule au sein de la gamme. Depuis la gamme actuelle est seulementA3
,.Range("A1")
nous donneA3
.Puis, bien sûr,
.Select()
est encore de ne sélectionner queA3
Quand est
.Range("A1")
vraiment utile?Considérons l'exemple suivant, sans
Range("A1")
appel:Depuis que nous avons changé
ActiveCell
àSelection
laOffset(1,0)
choisira la même dimension gamme "Start" offset-ed par 1 ligne.c'est à dire:
Si c'est la gamme de "Démarrer":
Nous exécuter l'exemple de macro:
Nous avons une nouvelle sélection de la même dimension.
Cependant, si nous modifions l'exemple de macro pour inclure le
Range("A1")
:Seulement la première cellule de la sélection est maintenant sélectionné.
Bien sûr,
Resize()
permettrait de réaliser la même chose et à être plus clair, de l'OMI. 😉Super réponse! Merci de prendre le temps. Donc, je crois que je comprends votre explication concernant le "ActiveCell' par opposition à l'aide d'une fourchette (de Sélection()'): nous déplacer d'une cellule unique, par opposition à un ensemble par une seule ligne dans les deux scénarios distincts. Ce que je ne comprends pas tout est compris pourquoi le Range("A1") dans la ligne de code ne modifie pas le résultat de la ligne. Ou plus exactement ce qu'il dit de la fonction decaler pour le faire. Merci encore!
J'ai essayé de mettre à jour et clarifier. Voir mon edit
ainsi, le
Offset(x,x).Range()
partie est juste une définition de la taille de ce tableau, il est vous allez être l'dupant autour, non d'une référence à l'endroit que vous aurez à choisir? désolé, je pense que vous avez fait un bon travail en expliquant que je suis juste avoir de la difficulté à comprendre exactement ce queSelection.Offset(1, 0).Select
vsSelection.Offset(1, 0).Range("A1").Select
de définition. En python, nous voyonsopen("file.txt", 'a')
laa
est le addend option de définition de la fonction open (). Dans VBA est<<Array>>.Offset().xxx.Select
, xxx, où il a d'entrée de laRange()
et qui me confond.OriginalL'auteur chancea