这是Excel模板的VBA代码,我正在尝试将其转换为正在工作的VSTO项目中的C#。顺便说一下,这是一个VSTO加载项:

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


在这一点上,我对addedShapes()感到迷惑,不知道这是怎么回事。

更新:Matti提到addedShapes()代表VBA中的一个变体数组。所以现在我想知道addedShapes()的内容应该是什么。这是在C#中调用Shapes.Range()的正确方法吗?

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


感谢与VBA和C#合作的任何人愿意对我的问题和意见发表评论!

最佳答案

我不确定您的实际问题应该是什么,但是addedShapes是一个数组。在VB及其变体中,使用()而不是[]声明和访问数组。

另外,您的代码看起来只是一个漫长的过程:

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


最后一部分可能是

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


看看哪个可行。我真的不知道哪个MSDN建议。

07-26 03:39