Мне нужно прочитать таблицу во входящих документах Word. Эти таблицы могут быть двух типов:
Первую строку в обеих таблицах можно прочитать без проблем: я нахожу первую ячейку, расширяю диапазон или выделение до строки и читаю содержимое ячеек, затем перемещаю выделение вниз и так далее.
Но во втором случае мне нужно прочитать текст, содержащийся в ячейках с «Мин» и «Макс» (потому что иногда это «Макс|Мин»).
Мои вопросы:
Вам необходимо обращаться к отдельным ячейкам непосредственно в таблице с объединенными ячейками.
Ниже приведен пример, предполагающий, что код находится в одном документе с двумя таблицами:
Option Explicit
Sub TableTest()
Dim cellMin As String
Dim cellMax As String
cellMin = ThisDocument.Tables(2).Cell(2, 4).Range.Text
cellMax = ThisDocument.Tables(2).Cell(2, 5).Range.Text
MsgBox "The values are " & cellMin & " and " & cellMax & "!"
End Sub
«Как распознать, какой тип таблицы» на самом деле слишком общий вопрос.
Для конкретного примера, который вы показываете (с произвольным количеством строк), вы можете использовать что-то вроде следующего, чтобы различать их:
With ActiveDocument.Tables(1) ' or (2)
If (.Rows.Count * .Columns.Count) = .Range.Cells.Count Then
' you have your first example
Else
' you have your second example
End If
End With
Или вы можете использовать что-то вроде этого, потому что в этом случае вы знаете, что ячейки (2,4) и ячейки (6) должны существовать.
With ActiveDocument.Tables(1) ' or (2)
If .Cell(2,4).Range.Start = .Range.Cells(6).Start Then
' you have your second example
Else
' you have your first example
End If
End With
Убедившись, что это ваш второй пример, вы можете сделать что-то вроде
Dim MinColumn As Long
Dim MaxColumn As Long
Dim theRow As Long
With ActiveDocument.Tables(2)
If UCase(Trim(.Cell(2,4).Range.Text)) = "MIN" then
MinColumn = 4
Else
MinColumn = 5
End If
For theRow = 3 To .Rows.Count
Debug.Print "Row " & CStr(theRow) & ", Min: " & .Cell(theRow,MinColumn).Range.Text
Next
End With
Пожалуйста, задайте более конкретный вопрос, а также покажите, как это сделать
the first row in both tables can be read without problems
. Что вы пытаетесь сделать и что не работает? Я бы подумал, что ячейки, содержащие «Мин» и «Макс», находятся во второй строке, но поскольку таблица не симметрична, вам необходимо напрямую обращаться к отдельным ячейкам.