Максимальное значение параметра NumRows метода Split

Автор Посетитель, 05 августа 2023, 13:29

Посетитель

Коллеги, подскажите пожалуйста, как узнать максимально возможное значение параметра NumRows метода Selection.Cells.Split.

Хотелось бы упростить и, наверняка, ускорить код, который сейчас работает через on error:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
    Dim i As Integer
    i = 30
    While i > 2
    On Error GoTo handle_error
    Selection.Cells.Split NumRows:=i, NumColumns:=1, MergeBeforeSplit:=False
    GoTo lbl_next
handle_error:
On Error GoTo -1
    i = i - 1
lbl_next:
    Wend
    On Error GoTo -1
   
End Sub
Sub Макрос2()
'
' Макрос2 Макрос
'
'
    Application.Run MacroName:="Макрос1"
    Selection.MoveRight Unit:=wdCell
    Selection.MoveRight Unit:=wdCell
    Application.Run MacroName:="Макрос1"
End Sub

Администратор

Перед запуском макроса что выделено в таблице:?
одна ячейка
несколько ячеек

Посетитель

Перед запуском выделена одна ячейка.
Мне надо разделить ячейку на максимально возможное количество строк, как это делает команда "Разделить ячейки" из ленты "Макет".
Количество объединенных строк от ячейки к ячейке меняется. Диалог "Разбиение ячеек", очевидно, "знает" это максимальное количество, но мне это значение надо получить в макросе.

Администратор

Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Предположительно можно разбить на 22 строки.
Я запустил этот макрос и получил ошибку (см. скриншот):
Sub Макрос()
    Selection.Cells.Split 100, 1, False
End Sub

Есть нестыковка между макросом и самим Вордом.
Макрос выдал сообщение, в нём указано 22.
Но если попытаться разбить ячейку в самом Ворде, указав 100, то в сообщении будет указано 11.
Значит максимально можно разбить на 11 строк.

Администратор


Посетитель

Решение найдено:

Sub Макрос3()
'
' Макрос3 Макрос
'
'
Dim rows As Integer
Dim cr As Range
Set cr = Selection.Cells(1).Range
Selection.Cells(1).Select
Selection.SelectRow
rows = Selection.Information(wdEndOfRangeRowNumber) - Selection.Information(wdStartOfRangeRowNumber) + 1
cr.Select
Selection.Cells(1).Split NumRows:=rows
End Sub