Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 | 3 |

 

  Вопрос: Последовательность чтения TextBox-рамок Добавлено: 05.10.07 16:24  

Автор вопроса:  ferico | Web-сайт: www.ricotech.ru

Ответить

  Ответы Всего ответов: 39  

Номер ответа: 31
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #31
Добавлено: 06.10.07 01:11
____ Не позволяет Word переписыватьShape'ы в коллекциях с одного места (индекса) на другой. Остаётся только завести "рабочий" абзац, перевести все якоря shape'ов из заданного абзаца на него и потом снова "завести" якоря на исходный абзац, но уже в нужной последовательности.
____ Надеюсь программно якоря передвигаются?

Ответить

Номер ответа: 32
Автор ответа:
 ferico



Вопросов: 2
Ответов: 31
 Web-сайт: www.ricotech.ru
 Профиль | | #32
Добавлено: 06.10.07 01:23
Проверил такой вариант:
по очереди проставить привязки для каждой рамочки согласно нужной последовательности.
Ничего не изменилось.
Т.е. якоря рамок зафиксировались в той же позиции, как и были.

Может быть, можно знаете, как отсортировать состав коллекции ShapeRange ?

Ответить

Номер ответа: 33
Автор ответа:
 ferico



Вопросов: 2
Ответов: 31
 Web-сайт: www.ricotech.ru
 Профиль | | #33
Добавлено: 06.10.07 02:10
Возможно придется попробовать через "рабочий" абзац.

Вручную перетащив якоря ничего не меняет.

Ответить

Номер ответа: 34
Автор ответа:
 ferico



Вопросов: 2
Ответов: 31
 Web-сайт: www.ricotech.ru
 Профиль | | #34
Добавлено: 06.10.07 03:19
В одном из экспериментов удалсоь сделать так:
переместить все рамки на абзац ниже, а затем (вручную мышкой) передвинуть якоря рамок на верхний абзац в порядке следования, обратном требуемому.
После этого последовательность чтения рамок становится правильной.

Вывод: всетаки на последовательность считывания потока текста влияет именно порядок установки якорей рамок.

А теперь самое главное - свойство Anchor является "readonly", т.е. его самому установить нельзя.
Значит, опять стоит вопрос об альтернативном способе установки якоря рамки в нужное место.

Ответить

Номер ответа: 35
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #35
Добавлено: 06.10.07 10:46
____ Да, но может быть что-то можно сделать через дальнейшие свойства Anchor.

Ответить

Номер ответа: 36
Автор ответа:
 ferico



Вопросов: 2
Ответов: 31
 Web-сайт: www.ricotech.ru
 Профиль | | #36
Добавлено: 06.10.07 12:26
Дальнейших свойств Anchor, полезных для топика, почти нет.
Интересно, что данная проблема довольно редкая и трудно формулируемая. Но зато в рунете и зарубежных форумах часто встречается смежная проблема перемещения (move) объекта (изображения) внутри документа.
Из всего, что удалось найти, можно сделать единственный вывод, что уже установленный объект переместить нельзя.
(хотя еще хочу проверить возможность перемещения самого Range параграфа с якорями объектов).

Ответить

Номер ответа: 37
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #37
Добавлено: 06.10.07 20:36
____ Мне тоже не удалось передвинуть программно якорь.
____ Зато совершенно спокойно можно программно создать новый Word-файл и через буфер копирования перекатать туда все рамки в необходимой последовательности из исходного файла.
____ Может быть эта мысль плмжет решению проблемы?

Ответить

Номер ответа: 38
Автор ответа:
 ferico



Вопросов: 2
Ответов: 31
 Web-сайт: www.ricotech.ru
 Профиль | | #38
Добавлено: 06.10.07 21:01
У меня получилось по-другому (правда пока наполовину вручную):
Обращаюсь к каждому объекту Shape на странице в требуемой последовательности (точнее в обратном порядке к требуемой последовательсности, т.е. начиная с последнего элемента), считываю координаты, копирую объект
Set newShape = ActiveDocument.Bookmarks("\Page";).Range.Shapes("oldShape";).Duplicate

но можно и так:
Set newShape = ActiveDocument.Paragraphs(1).Range.Shapes("oldShape";).Duplicate
с присвоением новому объекту тех же координат и удаляю исходный объект. И так для всех объектов.
Таким образом, якоря становятся на первый параграф страницы, но в нужной последовательности. И текстовый поток сохраняется.

В общем это почти тоже самое, что скопировать объекты в другой документ, но зато не нужно настраивать параметры страниц и колонтитулы.

Ответить

Номер ответа: 39
Автор ответа:
 ferico



Вопросов: 2
Ответов: 31
 Web-сайт: www.ricotech.ru
 Профиль | | #39
Добавлено: 07.10.07 18:56
Спасибо за советы. В конечном счете все получилось, хотя и косвенным путем через дупликацию объектов.
это хорошо, если объекты все на одной странице. Но в общем случае, когда нужно объект переместить на другую страницу, нужно искать альтернативный способ.

Жаль, что в MSWord не предусмотрено такой функции для перемещения текстовых рамок или для работы с якорями объектов. На крайний случай можно было предусмотреть перевод одних объектов в другие с такими свойствами и потом обратный перевод в исходное состояние объекта, но уже на новом месте.
Например, если объект Shape перевести в рамку Frame, заатем ее переместить с помощью Move в другое место документа, и затем обратно преобразовать в Shape. Только обратное преобразование MSWord не позволяет.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам