Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

icq: 397882017
По умолчанию

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

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

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

icq: 397882017
По умолчанию

Для любопытствующих предлагаю код, имитирующий 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
Это перебор вперед, назад несложно переделать по этому принципу.
__________________
Макросы на заказ и готовый пакет - mtdmacro.ru

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

icq: 397882017
По умолчанию

Закладки в таблице тоже ведут себя неадекватно при вставке. Попробуйте создать закладку, охватывающую хотябы одну ячеку таблицы, а затем вставьте строку таблицы над/под строкой с закладкой. Вот демо-код:
Код:
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 основаны на закладках.
__________________
Макросы на заказ и готовый пакет - mtdmacro.ru

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

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

четная таблица
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 вне форума   Ответить с цитированием
Старый 13.04.2011, 14:44   #26
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 370
Репутация: 223

icq: 397882017
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


07:02.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.