1

Тема: Можно ли вычислить ячейку по Range части ее содержимого?

Я пока вижу только тупой перебор в цикле всех таблиц документа и если ее Range включает исходный, то
тупой перебор всех ячеек этой таблицы на ту же тему. При большом количестве таблиц работать это будет весьма медленно.

А нет ли попроще и побыстрее метода, что бы по выделенному элементу текста узнать его ячейку?

Мне это нужно для 1). удаления этой ячейки из таблицы, или 2). добавления следующей за ней ячейки (строки) в таблицу.

Еще момент. Если ответ на предыдущий вопрос - нет, то могу ли я удалить ячейку, просто расширив Range на саму ячейку?

Заранее спасибо.

Отредактировано rizalut (22.01.2010 20:16:38)

2

Re: Можно ли вычислить ячейку по Range части ее содержимого?

Вот набросал процедуру. Один вопрос, почему в этой строке
r = rng.Cells.Item(1).RowIndex + 1
нужно добавлять 1, иначе выделяет предыдущую ячейку?

Public Sub GetCellByRange(rng As Range)
    Dim tRng As Range
    Dim c, r, t As Long
    Set rng = Selection.Range
    rng.Expand Unit:=wdCell
    c = rng.Cells.Item(1).ColumnIndex
    r = rng.Cells.Item(1).RowIndex + 1
    Set tRng = rng
    tRng.Expand Unit:=wdTable
    tRng.SetRange Start:=0, End:=tRng.End
    t = tRng.Tables.Count
    ActiveDocument.Tables(t).Cell(Row:=r, Column:=c).Select
End Sub

И еще: замена последней строки на
ActiveDocument.Tables(t).Cell(Row:=r, Column:=c).Delete
не удаляет ячейки в таблице формата: 1 строка, 2 столбца.
Впрочем и такого формата тоже: 2 строки, 1 столбец.
Может ли это быть связано, с тем, что в каждой ячейке находятся поля MACROBUTTON и одно из полей запускает данную процедуру с следующей модификацией:
1. В процедуру ничего не передается.
2. Исходный Range (соответствует переменной rng) = Selection.Range, происходящим при дабблклике на MACROBUTTON.
Что не так?

Отредактировано rizalut (22.01.2010 21:25:46)

3

Re: Можно ли вычислить ячейку по Range части ее содержимого?

Блин, все работает! Я просто ошибся в имени вызываемой полем процедуры.

Остается открытым 1 вопрос: почему в этой строке в вышеприведенном коде
r = rng.Cells.Item(1).RowIndex + 1
нужно добавлять 1, иначе выделяет предыдущую ячейку?

4

Re: Можно ли вычислить ячейку по Range части ее содержимого?

Используй функцию Information:

MsgBox CStr(Selection.Information(wdStartOfRangeColumnNumber)) & vbCr & _
       CStr(Selection.Information(wdStartOfRangeRowNumber))
Макросы под заказ и готовый пакет - mtdmacro.ru

5

Re: Можно ли вычислить ячейку по Range части ее содержимого?

Вождь, спасибо!
Красиво.