VBA-код для выбора таблицы в курсоре, что позволяет избежать сбоя при отсутствии таблицы в курсоре

Две разные копии для проверки того же проекта

В моем случае проблема заключалась в невозможности дифференциации Eclipse между двумя разными копиями одного и того же проекта. У меня есть одна блокировка на багажнике (контроль версий SVN), а другой - в одной ветви за раз. Я опробовал одно изменение в рабочей копии как тестовый пример JUnit, который включал в себя извлечение частного внутреннего класса для самостоятельного публичного класса, и пока он работал, я открываю другую копию проекта, чтобы посмотреть вокруг на другой часть кода, которая нуждается в изменениях. В какой-то момент NoClassDefFoundError появился, жалуясь, что частного внутреннего класса не было; двойной щелчок в трассировке стека привел меня к исходному файлу с неправильной копией проекта.

Закрытие внешней копии проекта и запуск тестового примера снова избавилось от проблемы.

1
задан Jo Pedder 16 January 2019 в 17:40
поделиться

3 ответа

Лучший способ - полностью удалить элементы 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
0
ответ дан Dave 16 January 2019 в 17:40
поделиться

Это можно сделать, посчитав количество таблиц в текущем выборе. Если их нет, будет ноль. В приведенном ниже примере кода, если есть нулевые таблицы, отображается сообщение, но его, конечно, можно удалить.

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
0
ответ дан Cindy Meister 16 January 2019 в 17:40
поделиться

Попробуйте:

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
0
ответ дан macropod 16 January 2019 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: