В моем случае проблема заключалась в невозможности дифференциации Eclipse между двумя разными копиями одного и того же проекта. У меня есть одна блокировка на багажнике (контроль версий SVN), а другой - в одной ветви за раз. Я опробовал одно изменение в рабочей копии как тестовый пример JUnit, который включал в себя извлечение частного внутреннего класса для самостоятельного публичного класса, и пока он работал, я открываю другую копию проекта, чтобы посмотреть вокруг на другой часть кода, которая нуждается в изменениях. В какой-то момент NoClassDefFoundError
появился, жалуясь, что частного внутреннего класса не было; двойной щелчок в трассировке стека привел меня к исходному файлу с неправильной копией проекта.
Закрытие внешней копии проекта и запуск тестового примера снова избавилось от проблемы.
Лучший способ - полностью удалить элементы Selection
и .Select
, поскольку вам не нужно использовать их для взаимодействия с чем-либо в вашем документе. Однако, поскольку я не знаю достаточно о том, что вы делаете, это должно работать для ваших нужд:
Sub FormatTable(control As IRibbonControl)
'
' FormatTable Macro
'
On Error Resume Next ' allow code to progress even if an error occurs
Selection.Tables(1).Select
If Err.Number <> 0 Then Goto ErrHandler ' Detect an error and step out to handle it
Selection.Tables(1).Style = "Prime Table 1"
Selection.Style = ActiveDocument.Styles("Normal")
On Error Goto 0 'switch off the On Error Resume Next as you really want to limit its use
ErrHandler:
MsgBox "Please Select a Table First"
End Sub
Это можно сделать, посчитав количество таблиц в текущем выборе. Если их нет, будет ноль. В приведенном ниже примере кода, если есть нулевые таблицы, отображается сообщение, но его, конечно, можно удалить.
Sub FormatTable(control As IRibbonControl)
'
' FormatTable Macro
'
If Selection.Tables.Count > 0 Then
Selection.Tables(1).Select
Selection.Tables(1).Style = "Prime Table 1"
Selection.Style = ActiveDocument.Styles("Normal")
Else
MsgBox "There's no table at the current selection."
End If
End Sub
Попробуйте:
Sub FormatTable(control As IRibbonControl)
With Selection
If .Information(wdWithInTable) = True Then
.Tables(1).Style = "Prime Table 1"
.Style = "Normal"
Else
MsgBox "There's no table at the current selection."
End If
End With
End Sub