2010-05-18 5 views
3

Il s'agit du code VBA d'un modèle Excel que j'essaie de convertir en C# dans un projet VSTO sur lequel je travaille. Soit dit en passant, il est un complément VSTO:Quel est l'équivalent C# de ce code VBA Excel pour les formes?

Dim addedShapes() As Variant 
ReDim addedShapes(1) 
addedShapes(1) = aBracket.Name 

ReDim Preserve addedShapes(UBound(addedShapes) + 1) 
addedShapes(UBound(addedShapes)) = "unique2" 

Set tmpShape = Me.Shapes.Range(addedShapes).Group 

À ce stade, je suis déconcerté par le addedShapes(), ne sais pas ce que cela est tout au sujet.

Mise à jour: Matti a mentionné que addedShapes() représente un tableau de variantes dans VBA. Alors maintenant, je me demande quel devrait être le contenu de addedShapes(). Serait-ce la bonne façon d'appeler l'appel Shapes.Range() en C#?

List<string> addedShapes = new List<string>(); 
... 
Shape tmpShape = worksheet.Shapes.get_Range 
    (addedShapes.Cast<object>().ToArray()).Group(); 

Je vous remercie de quelqu'un qui a travaillé avec VBA et C# prêt à faire un commentaire sur ma question & problème!

+0

que peu finale a fonctionné pour moi parfaitement ... merci pour le partage – gotmike

Répondre

2

Je ne suis pas sûr de ce que votre question réelle est censée être, mais addedShapes est un tableau. Dans VB et ses variantes, les tableaux sont déclarés et accessibles en utilisant () au lieu de [].

En outre, votre code semble que ce soit juste une façon très longue haleine de faire:

object[] addedShapes = new object[] { aBracket.Name, "unique2" }; 
Shape tmpShape = worksheet.Shapes.get_Range(addedShapes).Group(); 

La dernière partie pourrait encore être

Shape tmpShape = worksheet.Shapes[addedShapes].Group(); 

Voir qui fonctionne toujours. Je ne peux pas vraiment savoir lequel MSDN suggère.

+0

cela est certainement des informations utiles. Je vais mettre à jour mon message avec cette information ... peut-être que quelqu'un m'éclairera davantage. – code4life

+0

+1 pour m'aider sur mon chemin ... – code4life

2

Excusez les commentaires de style c, le style vb n'a pas la syntaxe hilight joliment.

//This declares an array of variants but does not initialize it. 
Dim addedshapes() As Variant 

//Initializes the array with a max index of 1. (insert vb index rant here) 
ReDim addedShapes(1) 

//assigns the contents of aBracket.Name to element 1 of the array. 
addedShapes(1) = aBracket.Name 

//increases the size of addedShapes by 1, retaining any values. 
ReDim Preserve addedShapes(UBound(addedShapes) + 1) 

//sets the last element to the string literal 
addedShapes(UBOund(addedShapes)) = "unique2" 

//Not sure here because I havent done any VBA in a loooong time, 
//but anyway it's passing the array. 
set tmpShape = Me.Shapes.Range(addedShapes).Group 

en VB, Variant est juste un struct paresseux qui peut contenir tout type de données, int, flotteurs, objets, etc. donc en .Net la comparaison la plus directe serait une collection/tableau d'objets. Cependant, si vous savez ce qui s'y passe, il est préférable de limiter la collection à cela. Ainsi, plutôt que List<object> vous utiliseriez List<Class> ou List<BaseClass> ou List<ISomeInterface>