Word не имеет прямого способа получить то, что видно на экране. Это можно вычислить, но не со 100% точностью.
Следующий пример кода помогает мне, на моей машине. Может потребоваться некоторая настройка для работы с другим набором.
Объектная модель действительно возвращает координаты окна приложения (ActiveWindow
, здесь), высоту этого окна и UsableHeight
- высота фактического рабочего пространства документа. Это можно использовать для получения оценочной позиции.
Существует также Windows эквивалент функции API - RangeFromPoint
- для объекта Window
, который возвращает Range
в документе для данного экрана координаты.
Этот код вычисляет левую и верхнюю позиции для начала видимой части документа, а также для конца видимого документа. (В моем тесте это было немного больше, но не намного). Затем он проверяет, есть ли одна или несколько таблиц в этой области. Если это так, он берет первый (Set tbl = rngTargetStart.Tables(1)
) - это возвращает объект, с которым ваш код должен работать. В качестве «бонуса» код печатает индексный номер таблицы в документе и страницу, на которой он находится, в «Немедленное окно».
Sub CheckForTableOnPage()
Dim WordWindowTop As Long 'in points
Dim WordWindowLeft As Long 'in points
Dim windowUsableHeight As Long 'in points
Dim rngTargetStart As Range
Dim rngTargetEnd As Range
Dim pageNumberTarget As Long
Dim tbl As Table
WordWindowTop = ActiveWindow.height
WordWindowLeft = ActiveWindow.left
windowUsableHeight = ActiveWindow.UsableHeight
RibbonFactor = 200
Set rngTargetStart = ActiveWindow.RangeFromPoint(WordWindowLeft, WordWindowTop - windowUsableHeight)
Set rngTargetEnd = ActiveWindow.RangeFromPoint(WordWindowLeft, WordWindowTop + windowUsableHeight)
rngTargetStart.End = rngTargetEnd.End
If rngTargetStart.Tables.Count >= 1 Then
pageNumberTarget = rngTargetStart.Information(wdActiveEndPageNumber)
Set tbl = rngTargetStart.Tables(1)
rngTargetStart.Start = ActiveDocument.Content.Start
Debug.Print "The table on page " & pageNumberTarget & " is number: " & rngTargetStart.Tables.Count
End If
End Sub