Проверьте имя стиля или получите имя стиля VSTO Word VB.NET

Я написал следующий код в Word VBA, и он работает.

Dim para As Paragraph
Dim nextPara As Paragraph
For Each para In ActiveDocument.Paragraphs
    If para.Style = CMB1.Value Then
        Set nextPara = para.Next
        If nextPara.Style = CMB2.Value Then
            If Not nextPara Is Nothing Then
                para.Style = CMB3.Value
                nextPara.Style = CMB4.Value
            End If
        End If
    End If
Next

Я преобразовал этот код в VSTO VB.NET:

    Dim para As Word.Paragraph
    Dim nextPara As Word.Paragraph

    For Each para In activeDoc.Paragraphs
        If para.Style = cmbStyle1.SelectedItem.ToString Then
            nextPara = para.Next
            If nextPara.Style = cmbStyle2.SelectedItem.ToString Then
                If Not nextPara Is Nothing Then
                    para.Style = cmbStyle3.SelectedItem.ToString
                    nextPara.Style = cmbStyle4.SelectedItem.ToString
                End If
            End If
        End If
    Next

Но когда я запускаю, в следующей строке выдает ошибку.

Если Para.Style = cmbStyle1.SelectedItem.ToString Тогда

Что я должен делать?

2 ответа

Решение

Работа с Word PIA может иногда отличаться от VBA. Не много, когда вы работаете с VB.NET, но иногда немного...

Чтобы получить имя стиля, вам сначала понадобится объект Style. Например

    Dim para As Word.Paragraph = Globals.ThisAddIn.Application.Selection.Range.Paragraphs(1)
    Dim styl As Word.Style = para.Range.Style
    System.Diagnostics.Debug.Print(styl.NameLocal)

Таким образом, ваш код должен быть похож на следующий код. Обратите внимание, что нет необходимости создавать объект Style, чтобы назначать стиль для Range. Только при получении свойств стиля.

Dim para As Word.Paragraph
Dim nextPara As Word.Paragraph
Dim paraStyle as Word.Style
Dim paraStyleNext as Word.Style

For Each para In activeDoc.Paragraphs
    paraStyle = para.Style
    If paraStyle.NameLocal = cmbStyle1.SelectedItem.ToString Then
        nextPara = para.Next
        paraStyleNext = nextPara.Style
        If paraStyleNext.NameLocal = cmbStyle2.SelectedItem.ToString Then
            If Not nextPara Is Nothing Then
                para.Style = cmbStyle3.SelectedItem.ToString
                nextPara.Style = cmbStyle4.SelectedItem.ToString
            End If
        End If
    End If
Next

Paragraph.Style Свойство в Word - это вариант WdBuiltinStyle тип. Вам придется ссылаться на строку Paragraph.Style.NameLocal,

Пример:

If para.Style.NameLocal = cmbStyle1.SelectedItem.ToString Then

Обязательно включите перехват ошибок во всех ваших процедурах. Вот пример для.NET

Другие вопросы по тегам