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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2009, 12:44   #1
Energy42
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 10
По умолчанию Программное удаление таблицы.

Имеется документ, который пользователь может как угодно править, нужно написать скрипт, который среди текста документа найдёт нужную табличку и удалит её. Вопрос в том, как именно идентифицировать эту табличку? Пользователь может добавить ещё несколько таблиц, может саму таблицу изменить, может таблицу вовсе удалить, в общем изменить может всё что угодно.
Возможное есть способ задать таблице какой-нибудь уникальный идентификатор и по нему потом удалить таблицу? Или может есть возможность добавить какой-нибудь контейнер, в который уже внедрить таблицу и потом удалять либо весь контейнер целиком, либо содержимое контейнера?
Energy42 вне форума Ответить с цитированием
Старый 25.09.2009, 14:15   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

поместить таблицу в закладку и удалять содержимое закладки
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 26.09.2009, 20:14   #3
Energy42
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 10
По умолчанию

Большое спасибо за идею! В понедельник поищу информацию по закладкам (что это такое, как они создаются/удаляются и т.д.), надеюсь с их помощью получится реализовать то что надо.
Energy42 вне форума Ответить с цитированием
Старый 26.09.2009, 23:43   #4
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
поместить таблицу в закладку и удалять содержимое закладки
интересная штука!!! Не успел познакомиться с закладками как они мне уже нравятся!!!

Вот только не представляю как можно пометить часть ячеек в Excel и вставить в виде таблицы как закладку...
xamillion вне форума Ответить с цитированием
Старый 27.09.2009, 02:00   #5
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Посмотрите http://www.programmersforum.ru/showt...864#post351864

Последний раз редактировалось Aent; 27.09.2009 в 13:31.
Aent вне форума Ответить с цитированием
Старый 28.09.2009, 09:57   #6
Energy42
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 10
По умолчанию

Для эксперимента взял документ, добавил две закладки с именами bm1 и bm2, после чего написал 2 процедурки:
Код:
Private Sub InsFile()
    For Each Bookmark In ActiveDocument.Bookmarks
        If Bookmark.Name = "bm1" Or Bookmark.Name = "bm2" Then
            Bookmark.Range.InsertFile ("c:\test.doc")
        End If
    Next
End Sub

Private Sub DelBm()
    For Each Bookmark In ActiveDocument.Bookmarks
        If Bookmark.Name = "bm1" Or Bookmark.Name = "bm2" Then
            Bookmark.Range.Delete
        End If
    Next
End Sub
Первая процедура отрабатывает как и ожидал, то есть в места, где были вставлены закладки, добавилось содержимое другого файла (в моём случае таблица). Вторая процедура удалила всего навсего один (первый) символ из добавленного текста. Из чего делаю вывод, что текст был добавлен в начало закладки, но сама закладка не изменила свой Range. Я честно говоря думал, что закладка "растянется" на величину добавленного текста.

Можно ли как-нибудь заставить закладку изменить свои границы (Range) на величину вставленного текста и при этом, чтобы Range автоматом изменялся при изменении текста внутри закладки? Подозреваю, что такое сделать невозможно. Но всё же очень надеюсь, что гуру предложат какой-нибудь способ...
Energy42 вне форума Ответить с цитированием
Старый 28.09.2009, 12:01   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Да,тут есть подводный камень. Дело в том, что файл вставился не в закладку, а после неё. Чтобы добавить просто текст в закладку, есть стандартный метод из справки. На его основе я сделал свою процедуру:
Код:
Sub UpdateBookmarks(ByVal NameOfBookmark As String, ByVal ContentOfBookmark As Variant)
    Dim oRng As Range
    Dim oBm As Bookmarks
    
    Set oBm = ActiveDocument.Bookmarks
    Set oRng = bm(NameOfBookmark).Range
    oRng.Text = ContentOfBookmark
    oBm.Add NameOfBookmark, oRng
End Sub
Нужно указать имя закладки, которую нужно изменить и новое содержимое.

Со вставкой файла происходит интереснее. Если нужно изменить текст закладки вручную, то текст нужно вводить после ее начала, но не в конце.
Вот у меня закладка, в которой находятся 5 неразрывных пробелов:

Если я начну вводить текст туда, где находится курсор, то текст закладки изменится:

Если же я поставлю курсор в конец закладки

и начну вводить текст, то содержимое закладки не изменится:

Да, чтобы было легче ориентироваться в закладках, нужно отобразить их границы командой:
Код:
ActiveWindow.View.ShowBookmarks=True
Это поможет ориентироваться.
Таким образом, нужно вставить закладку, добавить в нее хотя бы два символа, запомнить диапазон первого символа и уже в этот диапазон вставлять файл:
Код:
Sub InsertFileToBookmark()
  Dim oRng As Range
  Dim oBm As Bookmark
  'Добавляем закладку в начало документа
  Set oBm = ActiveDocument.Bookmarks.Add("bm1")
  'Изменяем текст этой закладки на два неразрывных пробела
  UpdateBookmarks "bm1", ChrW(160) & ChrW(160)
  'Запоминаем расположение первого символа в закладке
  Set oRng = oBm.Range.Characters.First
  'Вставляем вместо него файл
  oRng.InsertFile "c:\test.docx"
  'Удаляем последний неразрывный пробел
  ActiveDocument.Bookmarks("bm1").Range.Characters.Last.Delete
End Sub

Sub UpdateBookmarks(ByVal NameOfBookmark As String, ByVal ContentOfBookmark As Variant)
    Dim oRng As Range
    Dim oBm As Bookmarks
    
    Set oBm = ActiveDocument.Bookmarks
    Set oRng = oBm(NameOfBookmark).Range
    oRng.Text = ContentOfBookmark
    oBm.Add NameOfBookmark, oRng
End Sub
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 28.09.2009 в 13:13.
viter.alex вне форума Ответить с цитированием
Старый 29.09.2009, 10:14   #8
Energy42
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 10
По умолчанию

Спасибо, кажется это то что нужно...
Energy42 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строки таблицы Grusha Microsoft Office Access 1 11.06.2009 15:44
Удаление, обновление записей из MySQL таблицы xDjarx БД в Delphi 2 14.05.2008 13:36
Программное создание таблицы в InterBase Proof БД в Delphi 2 05.05.2008 21:05
Программное индексирование Рустам БД в Delphi 2 27.08.2007 09:34