Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2011, 15:22   #21
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Aent Посмотреть сообщение
...пользовательская функция возвращающая инвертированную копию коллекции...
Этот вариант даже хуже. Коллекции, создаваемые пользователем (Collection), не обновляются автоматически при изменении документа, в отличие от Cells, например. Придется дополнительно проверять целостность элементов коллекции.

Я думал об использовании коллекции, как хранилища отработанных ячеек. Даже написал рабочий код, который обходит любое удаление по ходу перебора ячеек. Но при комбинации изменений (несколько удалений и вставок ячеек) и коллекция не помогает.

Единственный выход как-то запомнить позицию в документе. Вот и думаю: Как?
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 29.01.2011, 17:43   #22
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Для любопытствующих предлагаю код, имитирующий For Each.
Код:
Public Sub Имитатор_For_Each_Cells()
' перебор всех ячеек документа с учетом изменений

Dim COL As New Collection
Dim TS As Tables
Dim C As Cell
Dim R As Range
Dim N&, K&, X&

    Set R = ActiveDocument.Range ' начальная область
    N = 0
    Do
        ' вспоминаем последнюю
        For Each C In COL
            If IsObjectValid(C) Then
                ' следующая таблица
                If C.Next Is Nothing Then
                    With C.Range
                        .SetRange .End + 1, R.End
                        Set TS = .Tables
                    End With
                    GoTo 2
                ' следующая ячейка
                Else
                    Set C = C.Next
                    GoTo 1
                End If
            Else
                COL.Remove Index:=1
            End If
        Next C

        ' первая ячейка первой таблицы
        Set TS = R.Tables
2:      If TS.Count <= 0 Then Exit Do
        Set C = TS(1).Cell(Row:=1, Column:=1)
        
1:      ' запоиминаем
        If COL.Count <= 0 Then COL.Add Item:=C Else COL.Add Item:=C, Before:=1
        
        ' обработка
        ' >> произволное изменение документа <<<
    Loop
    
End Sub
Это перебор вперед, назад несложно переделать по этому принципу.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/

Последний раз редактировалось Вождь; 30.01.2011 в 14:38.
Вождь вне форума Ответить с цитированием
Старый 31.01.2011, 11:58   #23
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Закладки в таблице тоже ведут себя неадекватно при вставке. Попробуйте создать закладку, охватывающую хотябы одну ячеку таблицы, а затем вставьте строку таблицы над/под строкой с закладкой. Вот демо-код:
Код:
Dim R As Range, B As Bookmark, T As Table
    
    Set R = ActiveDocument.Range
    Set T = R.Tables.Add(R, 1, 3)
    Set R = T.Cell(1, 2).Range
    Set B = R.Bookmarks.Add("zzz")
    T.Rows.Add
    B.Range.Select
Получается, что в таблицах безопасно можно использовать только точечные закладки (Start=End). Как же так? Ведь большинство инструментов MS Word основаны на закладках.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/

Последний раз редактировалось Вождь; 31.01.2011 в 17:32.
Вождь вне форума Ответить с цитированием
Старый 13.04.2011, 13:51   #24
diletant2
 
Регистрация: 11.04.2011
Сообщений: 6
По умолчанию

извините за оффтоп, но мне кажется, что моя проблема созвучна с Вашей: дана произвольная таблица n x m с текстом, требуется перебрать все ячейки первой строки, найти в них одинаковый текст, например "ххх", и, если ячейка с текстом найдена, удалить соответствующий столбец, далее найти следующую ячейку с текстом "ххх" в даной строке и т.д. можете предложить рабочий цикл?
Nevidim u volov um - i diven!
diletant2 вне форума Ответить с цитированием
Старый 13.04.2011, 14:15   #25
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

четная таблица
11-12-13-14-15-16
21-22-23-24-25-26
31-32-33-34-35-36

удаляем 12-14-16-22-24-26-32-34-36

остается
11-13-15
21-23-25
31-33-35
нечетная таблица
11-12-13-14-15-16-17
21-22-23-24-25-26-27
31-32-33-34-35-36-37

удаляем 12-14-16-21-23-25-27-32-34-36

остается
11-13-15-17
22-24-26
31-33-35-37

что делать со строкой 2
или я что-то недопонимаю в замысле творца задачи

может удаляются 2-4-6... позиции в каждой строке
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 13.04.2011, 14:44   #26
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от diletant2 Посмотреть сообщение
...моя проблема созвучна с Вашей...
Никак не связана. Собственно в Вас не проблема, а обычное домашнее задание
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 13.04.2011, 22:09   #27
diletant2
 
Регистрация: 11.04.2011
Сообщений: 6
По умолчанию обычное домашнее задание

сорри, разжуйте, плизз: я не студент, а что?
Nevidim u volov um - i diven!
diletant2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бекап только наоборот Cpluser SQL, базы данных 1 23.01.2011 12:30
Все наоборот! ship85 Microsoft Office Excel 0 20.01.2011 14:19
Ввод слова наоборот program123 Общие вопросы Delphi 4 09.05.2009 11:06
ВПР наоборот Python Microsoft Office Excel 6 11.04.2009 00:08
Слово наоборот Ketu Паскаль, Turbo Pascal, PascalABC.NET 12 16.03.2008 00:23