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 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