2017-08-24 5 views
0

Si j'ai une ou plusieurs plages, comment puis-je les combiner dans une plage avec plusieurs zones?VSTO Excel - Comment créer une plage avec plusieurs zones

On pourrait penser à le faire comme ça ... mais ce ne sera pas même compiler ...

Excel.Worksheet sheet = workbook.ActiveSheet; 
Excel.Range rng1 = (Excel.Range) sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,42]); 
Excel.Range rng2 = (Excel.Range) sheet.get_Range(sheet.Cells[5, 1], sheet.Cells[6,42]); 
Excel.Range result = new Excel.Range(); 
result.Areas.Add(rng1); 
result.Areas.Add(rng2); 

MISE À JOUR:

Ce n'est pas un doublon ... c'est sur la création une plage avec deux zones ... pas de création d'une plage à partir de deux plages avec une seule cellule (ce qui aboutirait à une plage avec une seule zone)

+0

double possible de [Comment créer une gamme de 2 gammes en VBA] (https://stackoverflow.com/questions/12527725/how-to -créer-un-range-from-2-ranges-in-vba) –

+0

Vous devriez également lire les réponses. –

+0

Je vois ce dont vous parlez dans les autres réponses ... Je ne suis pas vraiment sûr que si la question ne porte pas sur ce que vous demandez et que la réponse acceptée ne concerne pas ce que vous demandez ... si Cela devrait vraiment être considéré comme un doublon ... mais j'entends ce que vous dites ... Je vais aller de l'avant et taper une réponse afin que cette question ait une réponse claire ... et si elle est supprimée par StackOverflow que si soit ça. –

Répondre

0

Dérivé de l'une des réponses dans le texte ci-dessus "dupliqué" "question.

Remarque: il semble que si les zones peuvent être combinées, une Union le fera (par exemple, deux rangées adjacentes), mais si elles ne peuvent pas être combinées comme cela, cela crée plusieurs zones. (pas tout à fait sûr à ce sujet)

En outre, Union peut avoir plus de deux paramètres ... par ex. Union (range1, range2, range3, etc ...)

var excelApp = Globals.ThisAddIn.Application as Excel.Application; 
var sheet = workbook.ActiveSheet as Excel.Worksheet; 
var range1 = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,42]) as Excel.Range; 
var range2 = sheet.get_Range(sheet.Cells[5, 1], sheet.Cells[6,42]) as Excel.Range; 
var result = excelApp.Union(range1, range2) as Excel.Range;