Pourquoi les feuilles de calcul Excel doivent être activées avant de la choisir?
Ce code
Sheets(1).Activate
Sheets(2).Range("A1").Select
échouera en VBA parce que vous ne pouvez utiliser Select
sur un objet qui est Active
. Je comprends que c'est le cas.
Quel élément du modèle de données Excel des causes de ce le cas? Je pense qu'il y a une intention implicite de l'utilisateur/programmeur pour Activate
tout objet immédiatement avant l'utilisation de la Select
- je ne comprends pas pourquoi VBA ne serait pas faire cette supposition, et je suis en supposant qu'il existe une raison, cette distinction existe.
- Quelle partie de Excel datamodel empêche de sélection sans activation?
Tous les. Il est conçu pour fonctionner de cette façon, de bas en haut, et c'est parfaitement logique. Essayez de choisir quelque chose avec votre souris, sans la zone visée étant active, ou la marque de texte pour une sélection dans une fenêtre sans fenêtre la fenêtre est active (concentré) d'abord, ou tapez les touches de votre clavier sans toucher le clavier pour la rendre active. Votre code ne peut pas supposer de rien; vous devez être précis.
c'est mon point de vue. Il semble qu'il n'existe pas de circonstances dans lesquelles vous souhaitez
Parce que ce n'est pas la façon dont il a été conçu dès le début, et de le modifier maintenant serait probablement briser beaucoup de code existant. Peut-être que Joel Spolsky (l'un des créateurs originaux de VBA pour Excel et d'un co-créateur de ce site) vont voir et expliquer pourquoi la décision a été prise en premier lieu, mais tout le reste serait de la spéculation.
Merci pour la mise à jour. Je me rends compte à votre question sur l'intention de conception, mais si jamais vous avez besoin d'activer une plage alors
Ne connaissez pas la réponse, mais êtes-vous sûr que vous avez vraiment besoin pour sélectionner la cellule en premier lieu? Très probablement, vous juste besoin de faire référence à elle d'une certaine façon. Pour copier la valeur d'une cellule d'une autre feuille par exemple, vous n'avez pas besoin de sélectionner une cellule, puis l'autre, il suffit de faire
c'est mon point de vue. Il semble qu'il n'existe pas de circonstances dans lesquelles vous souhaitez
Select
, dans lequel il n' Activating
de sens (tous les exemples que renforcer ce point) - donc je ne comprends pas pourquoi VBA n'est pas automatiquement faire cela à chaque fois que vous appelez Select
.Parce que ce n'est pas la façon dont il a été conçu dès le début, et de le modifier maintenant serait probablement briser beaucoup de code existant. Peut-être que Joel Spolsky (l'un des créateurs originaux de VBA pour Excel et d'un co-créateur de ce site) vont voir et expliquer pourquoi la décision a été prise en premier lieu, mais tout le reste serait de la spéculation.
Merci pour la mise à jour. Je me rends compte à votre question sur l'intention de conception, mais si jamais vous avez besoin d'activer une plage alors
Application.Goto Sheets(2).Range("A1")
est une bien meilleure option à utiliser.Ne connaissez pas la réponse, mais êtes-vous sûr que vous avez vraiment besoin pour sélectionner la cellule en premier lieu? Très probablement, vous juste besoin de faire référence à elle d'une certaine façon. Pour copier la valeur d'une cellule d'une autre feuille par exemple, vous n'avez pas besoin de sélectionner une cellule, puis l'autre, il suffit de faire
sheet1.range("A1") = sheet2.range("A1")
. L'activation d'une feuille et la sélection d'une plage est généralement inefficace.OriginalL'auteur enderland | 2012-10-02
Vous devez vous connecter pour publier un commentaire.
Comme brettdj souligné, vous n'avez pas à activer la feuille de commande pour sélectionner une plage. Voici une référence avec une surprenante grande quantité de exemples de sélection de cellules ou de plages de.
Maintenant, comme pour le pourquoi dois-je actif de la feuille en premier? Je ne crois pas que c'est un défaut du modèle de données, mais simplement une limitation de la méthode de sélection pour des Gammes.
De l'expérimentation, il semble comme il y a deux conditions pour sélectionner une plage dans Excel.
À l'appui de cette demande, vous ne pouvez pas sélectionner une cellule à partir d'une feuille masquée.
Tout simplement, quand il s'agit de Plages, vous ne pouvez pas sélectionner celui que vous ne voyez pas.
J'aurait affirmé que c'est une limitation de sélectionner tous ensemble, à l'exception que vous pouvez sélectionner un objet dans une feuille masquée. Idiot Excel.
OriginalL'auteur Daniel
Je sais que c'est un peu en retard à la fête, mais j'ai découvert un hack pour ce faire...
Essayez ce code:
Noter qu'il s'agit d'un hack, mais il fait l'affaire!!
OriginalL'auteur John Bustos
@Daniel Cook: merci pour votre réponse, mais malheureusement, Excel lui-même ne joue pas par les règles imposées sur Excel Macros...
Pour illustrer, je vais vous présenter brièvement mon problème actuel...
Je suis d'essayer de re-ensemble d'un tableau contenu dans un etat commun. Cette méthode sera appliquée à plusieurs tables à travers les différentes feuilles:
Pour chaque cas d'utilisation ci-dessous,
Table1
est trouvé dansSheet1
De Cas D'Utilisation 1:
Sheet1
, sélectionnez la gamme deA1
restoreTable
Sheet1
A1
reste sélectionnéDe Cas D'Utilisation 2:
Sheet1
, sélectionnez la gamme deA1
Sheet2
restoreTable
Sheet1
A1
est pas sélectionné, au lieu de la plage deTable1[#Data]
est sélectionnéSolution
C'est absolument terrible, mais c'est la meilleure solution que j'ai pu trouver
Remarque: dans ce cas, le
original
* les plages ne sont pas nécessaires, mais vous obtenez le point: vous pouvez tampon de la sélection d'origine et de les restaurer lorsque vous avez fini deJe n'aime vraiment pas excel
OriginalL'auteur FraggaMuffin
Bien sûr, vous n'avez pas à sélectionner ou activer la feuille de sélectionner/activer la cellule. Ma façon est d'utiliser des "on Error Resume Next" et "on Error GoTo 0". Le Code ci-dessous sélectionne la première cellule de chaque feuille de calcul d'un classeur sans le sélectionner. Les feuilles de calcul sont même très caché sur cette scène.
OriginalL'auteur Eswemenasja