Automation Excel. Besoin d'get la sélection précédente lorsque la sélection change

Je travaille sur une boîte de dialog import (à partir d'Excel) qui utilise l'automation pour permettre à l'user de sélectionner des plages de cellules à importer. Lorsque la gamme est sélectionnée, j'utilise l'évier d'événement pour capturer l'événement et hilight la première ligne et la première colonne. Je dois avoir l'opportunité de ne pas personnaliser la première ligne et la colonne de la précédente sélection. Je ne pense pas qu'il soit sûr d'get la gamme sélectionnée au moment où la sélection change, et callbackez-vous, par exemple (psuedocode pour plus de brièveté et de clarté):

OnSelectionChange() { if (m_PrevSelection) UnHilite(m_PrevSelection); HiliteCurrentSelection(); GetSelectedRange(m_PrevSelection); } 

Je suppose que le fait de taper sur cette gamme (obtenue à partir de _Application :: Selection) sans la libérer entraînera toutes sortes de problèmes (mais je me trompe peut-être). Je n'ai pas trouvé de moyen de copyr la plage (IRange Copy suffit de copyr les contenus des cellules d'une gamme à l'autre).

Je suppose que je pourrais prendre les adresses cellulaires de la gamme et les stocker, puis recréer une gamme à partir du moment où je dois faire l'improvisation, mais il me semble que je me pose si souvent que je me request si quelqu'un d'autre avait une solution plus élégante .

Si vous travailliez dans Excel VBA, vous pourriez

 Set Rng = Application.Selection 

où Rng est un object Excel Range. J'imagine que vous pourriez reproduire cet object d'où vous êtes.

Ou vous pouvez stocker l'adresse de la cellule dans une variable de string comme vous l'avez suggéré, ce qui évidemment ne nécessite aucun object.

Malheureusement, Excel ne tient pas count des sélections.

Si vous ne vous attendez pas à ce que la gamme se déplace ou change de taille, je stockerais l'adresse et, plus tard, utiliser Range (myAddress) pour renvoyer l'object de plage pour la mise en surbrillance.

Une reference d'adresse se référera toujours à une zone fixe de la feuille tandis qu'une plage sera mise à jour pour refléter les insertions / suppressions de cellules. L'une ou l'autre d'entre elles peut correspondre à vos intentions, mais notez que la reference de la gamme peut devenir indéfinie si les cellules qu'il contient sont supprimées.

Chaque fois que vous détectez une nouvelle gamme (ce que vous faites déjà, pour mettre en surbrillance la première ligne et la colonne), enregistrez les détails de cette scope sur les variables quelque part (en supposant qu'il s'agisse d'une seule plage rectangular, de la première et de la dernière ligne, et du premier et dernier colonne).

Chaque fois que vous détectez une nouvelle gamme après cela, vous avez maintenant les détails stockés de la plage précédente à utiliser pour effacer les points forts précédents (et cet événement stockera les détails pour la prochaine fois, etc.).