2016-03-06 9 views
0

Я перехожу из VBA в VB.NET для надстройки Excel с помощью ExcelDNA. В моем коде я пытаюсь обратиться к NamedRange по его имени (например, я мог бы в VBA), чтобы установить свойство «ReferTo» этого имени. Однако я получаю сообщение об ошибке, что он не может преобразовать имя, которое я предоставил Integer. Ошибка. Преобразование из строки «MyNamedRangeName» для ввода «Integer» недопустимо.Как обратиться к Excel NamedRange в Visual Studio с помощью Microsoft.Office.Interop

В коде внизу, вы видите, где возникла ошибка и почему.

Imports Microsoft.Office.Interop 
Imports ExcelDna.Integration 
Public Class Class1 
    Sub SetReferToProperty() 
     Dim ap As Excel.Application = ExcelDnaUtil.Application 
     Dim wb as Excel.Workbook = ap.ActiveWorkbook 

     'This is where the error occurs. Apparently, I can't (?) refer to  
     'the NamedRange by it's name. I need to use it's index. 
     wb.Names("MyNamedRangeName").RefersTo = 0 

     'If I use the Index instead (assume it's 1) it will work, but I 
     'want to use the name instead - not the index. 
     wb.Names(1).RefersTo = 0 
    End Sub 
End Class   

ответ

1

Иногда (я не уверен, когда именно) VB.NET требует, чтобы указать свойство коллекции (в данном случае, Items) в явном виде, и индексатор по умолчанию не работает. Таким образом, вы должны сказать:

wb.Names.Item("MyNamedRangeName").RefersTo = 0 

Обратите внимание, что если вы хотите, чтобы добавить новое имя, вы бы сказали:

wb.Names.Add("MyNamedRangeName", 0) 
+0

Wow Govert вы везде! =) Это исправлено. Спасибо за вашу помощь. – ptownbro