1

Тема: Обращение в макросе к текущей таблице

Если вам необходимо обратиться в макросе к текущей таблице, на одной из ячеек которой установлен курсор, то вам могут быть полезны результаты обсуждения этой проблемы в ветке: http://wordexpert.ru/forum/viewtopic.php?id=1349. В обсуждении активно участвовали эксперты форума Вождь, aap77 и Ципихович Эндрю.

Следующий макрос позволяет обратиться к текущей (активной) таблице или к первой таблице в выделении:

Sub ThisTable()
    If Selection.Tables.Count <> 0 Then
        'выполняем действия с первой таблицей в выделении
        'например: Selection.Tables(1).Rows(1).Select
    Else
        MsgBox "Таблица отсутствует"
    End If
End Sub

Альтернативное решение сформировано на основе макроса, предложенного в внешняя ссылка:

Sub TableNumber()
'
' Определение номера таблицы
'
    Dim ThisTableIndex As Variant
    ThisTableIndex = 0
    
    'Определяем номер текущей таблицы
    Dim MyRangeTable()
    For i = 1 To ActiveDocument.Tables.Count
        ReDim Preserve MyRangeTable(i)
        Set MyRangeTable(i - 1) = ActiveDocument.Tables(i).Range
        ActiveDocument.Tables(i).ID = "Table " & i
    Next
    For i = 1 To ActiveDocument.Tables.Count
        If Selection.InRange(MyRangeTable(i - 1)) Then
           ThisTableIndex = i
        End If
    Next
    
    'Печать номера текущей таблицы
    If ThisTableIndex <> 0 Then
        MsgBox "Номер таблицы: " & ThisTableIndex, vbInformation, "Номер таблицы"
    Else
        MsgBox "Это не таблица", vbCritical, "Номер таблицы"
    End If
End Sub

В данном макросе производится перебор всех таблиц файла и определяется номер текущей таблицы.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

2

Re: Обращение в макросе к текущей таблице

В данном макросе производится перебор всех таблиц файла и определяется номер текущей таблицы.

Есть другой способ:

Public Function NumTable() As Long
Dim tbl As Table, rng As Range
    Set Table = Selection.Tables(1)
        Set rng = ActiveDocument.Range(ActiveDocument.Range.Start, tbl.Range.Start)
        NumTable = rng.Tables.Count
End Function

Функция возвращает номер текущей таблицы

3

Re: Обращение в макросе к текущей таблице

aap77 пишет:

В данном макросе производится перебор всех таблиц файла и определяется номер текущей таблицы.

Есть другой способ:

Public Function NumTable() As Long
Dim tbl As Table, rng As Range
    Set Table = Selection.Tables(1)
        Set rng = ActiveDocument.Range(ActiveDocument.Range.Start, tbl.Range.Start)
        NumTable = rng.Tables.Count
End Function

Функция возвращает номер текущей таблицы

Функция выдала ошибку Not set для объекта tbl. Вероятно, это опечатка. Также выражение конца диапазона tbl.Range.Start может не включать текущую таблицу. Немного изменил функцию (внесенные изменения подчеркнуты):

Public Function NumTable() As Long
    Dim tbl As Table, rng As Range
    Set tbl = Selection.Tables(1)
        Set rng = ActiveDocument.Range(ActiveDocument.Range.Start, tbl.Range.End)
        'rng.Select
        NumTable = rng.Tables.Count
        MsgBox NumTable
End Function

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

4

Re: Обращение в макросе к текущей таблице

Все правильно