VSTO vb. NET - Получить имя существующих элементов управления рабочим листом. - PullRequest
0 голосов
/ 23 апреля 2020

Я разрабатываю надстройку Excel с использованием VSTO на vb. Net, где я пытаюсь получить имена существующих элементов управления рабочего листа. В этом проекте я добавляю два типа элементов управления, TableLayoutPanel и NamedRange. Я oop существующих элементов управления листа, и я не могу получить тип элемента управления, и в случае, если это будет элемент управления NamedRange, я успешно получаю его ссылочную ячейку. Несмотря на это, я не могу получить название обоих типов элементов управления.

Как я могу получить название элементов управления?

Код ниже, где я создаю элементы управления:

       `Dim painel = New System.Windows.Forms.TableLayoutPanel
        Dim changesRange As Microsoft.Office.Tools.Excel.NamedRange

        Dim nomes As Microsoft.Office.Interop.Excel.Names = Globals.ThisAddIn.Application.ActiveWorkbook.Names

        PanelsID += 1

        changesRange = ws.Controls.AddNamedRange(range, CStr("NamedRange_" & PanelsID))
        ws.Controls.AddControl(painel, range, "Panel" & PanelsID)

        Dim name1 As Excel.Name = CType(changesRange.Name, Excel.Name)
        'I could get the name of the control here
        MessageBox.Show(name1.Name)`

Код ниже, где я ' m зацикливание существующих элементов управления листа:

   Function lerRange(ws As Microsoft.Office.Tools.Excel.Worksheet, range As Excel.Range) As Boolean
        Dim wsControls As Integer
        wsControls = ws.Controls.Count

        For i = 0 To wsControls - 1
            'Image1
            MsgBox(ws.Controls(i).GetType.ToString)
            If InStr(ws.Controls(i).GetType.ToString, "NamedRange") > 0 Then
                'Image2
                MsgBox(ws.Controls(i).RefersTo)
                'Image3
                MsgBox(ws.Controls(i).name.ToString)
            Else
                'Image4 - Using property name without toString()
                MsgBox(ws.Controls(i).name)
            End If
        Next

        lerRange = False
    End Function

Выходное изображение1 - Тип элемента управления

Выходное изображение2 - Диапазон задания элемента управления NamedRange

Выходное изображение3 - Выходное имя элемента управления

Выходное изображение4 - Сообщение об ошибке

Заранее спасибо тем, кто может помочь!

1 Ответ

0 голосов
/ 27 апреля 2020

Свойство Name элемента управления NamedRange имеет заглавную букву в начале , а является объектом. Таким образом, вы можете попытаться получить имя, как в этом примере.

...

For i = 0 To wsControls - 1
  If InStr(ws.Controls(i).GetType.ToString, "NamedRange") > 0 Then
    ...
    MsgBox(ws.Controls(i).Name.name)
    ...
  End If
Next

...

Дополнительную информацию вы можете получить в документах microsofts для свойства NameRange.Name .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...