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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 00:13   #1
Nik_2sv
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 18
По умолчанию Вопрос по word-у

Тут возникла следующая ситуация...
Создается файл (вердовский) с тремя таблицами:

1-я в 4 столбца кол-во строк от 1 до 10 (варьируется от количества информации)
2-я в 1 столбец кол-во строк от 1 до 10 (варьируется от количества информации)
3-я в 4 столбца кол-во строк от 1 до 50 (варьируется от количества информации)

В строки 3-ей таблицы вставляется информация с ссылками на страницы определенного сайта.

Местами строки переносятся из начала или середины таблицы в конец или в начало. Это зависит от необходимости сортировки инфы необходимой пользователю. Для этого были написаны макросы для ускорения выполняемых однотипных операций.

Каждый день создается новый файл путем или копирования пред идущего или путем сохранения файла с новым именем...

После создания 250 файлов вылезла проблема:
Когда вырезаешь строку и пытаешься вставить её в конец 3 таблицы (собственно все операции проводятся с ней) вылезает сообщение
"Cлишкoм мнoгo иcпpaвлeний в дoкyмeнтe. Oпepaция нe бyдeт пoлнocтью зaвepшeнa. Coxpaнитe peзyльтaты paбoты."
после этого когда пытаешься отменить совершенные действия вылазит идентичное окно и стрелка отмены становиться неактивной.

Переустановка офиса и очистка там всяких временных файлов результата не дала. Очистка формата результата тоже не дала. Рецензирование и исправление в документе не используется, включение и отключение его тоже результатов не дало....

Народ, в чем может быть проблема? За свой 15 летний опыт работы с разными word-ами начиная от 6 заканчивая 2007 я никогда с таким не сталкивался ...

Сейчас стоит 2003.
Nik_2sv вне форума Ответить с цитированием
Старый 17.12.2010, 06:34   #2
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
Смущение

Я могу предположить лишь то,что существует некий стэк куда заносится информация(временная) например с номером строки исходной в конечную и т.д. Насколько я понимаю макросы используют VB? Как точно реализовать не знаю, но то что нужно или постоянно очищать этот "абстрактный" стэк либо использовать алгоритмитизацию завязанную не на стэке а на очереди.
stck вне форума Ответить с цитированием
Старый 17.12.2010, 10:14   #3
Nik_2sv
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 18
По умолчанию

да собственно в макросе записана последовательность:
1. скопировать строку
2. удалить строку
3. Перейти в конец документа "ctrl End"
4. Вставить строку
5. Выделить строку
6. Определить цвет для текста серый

нет никаких привязок к строкам
Товар продали - перенесли в конец списка обозначили серым и всё

Цитата:
Сообщение от stck Посмотреть сообщение
VB?
это что?
Цитата:
Сообщение от stck Посмотреть сообщение
"абстрактный" стэк
знать бы какой

Последний раз редактировалось Stilet; 17.12.2010 в 15:37.
Nik_2sv вне форума Ответить с цитированием
Старый 17.12.2010, 15:29   #4
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

VB - visual basic.
Есть 1 вариант, то что переполняется буфер.
Попробуйте в коде макроса после вставки скопированного текста:
My.Computer.Clipboard.Clear()
stck вне форума Ответить с цитированием
Старый 17.12.2010, 22:04   #5
Nik_2sv
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 18
По умолчанию

выдает синтаксическую ошибку
Код:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 26.11.2010 admin
'
    Selection.MoveLeft Unit:=wdCell
    Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
    Selection.Copy
    Selection.Rows.Delete
    Selection.EndKey Unit:=wdStory
    Selection.PasteAndFormat (wdPasteDefault)
                         Selection.My.Computer.Clipboard.Clear()
    Selection.MoveUp Unit:=wdLine, Count:=1
    Selection.MoveRight Unit:=wdCell
    Selection.Font.Color = wdColorGray25
    Selection.MoveDown Unit:=wdLine, Count:=1
End Sub
и он ошибку выдает перед вставкой из буфера

собственно попробовал чистить в ручную ошибка не уходит

Последний раз редактировалось Stilet; 19.12.2010 в 14:49.
Nik_2sv вне форума Ответить с цитированием
Старый 18.12.2010, 03:50   #6
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

ммм... занятно... попробуй через winAPI:
Цитата:
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Sub ClearClipboard()
OpenClipboard 0&
EmptyClipboard
CloseClipboard
End Sub
если и это не поможет....
stck вне форума Ответить с цитированием
Старый 18.12.2010, 14:14   #7
Nik_2sv
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 18
По умолчанию

куда её вставлять? процедура внутри процедуры?
Nik_2sv вне форума Ответить с цитированием
Старый 18.12.2010, 14:22   #8
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

declare - там где описаны переменные вначале кода, затем вставить описание функции перед основной. А потом в коде выполнения преобразования со строками, после операции вставки, вставить ClearClipboard();
stck вне форума Ответить с цитированием
Старый 19.12.2010, 13:03   #9
Nik_2sv
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 18
По умолчанию

я смог придумать только так, работать работает - очищать не очищает...

Код:
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Sub Макрос1()
' Макрос1 Макрос
' Макрос записан 18.12.2010 admin
'
    Selection.SelectRow
    Selection.Cut
    Selection.EndKey Unit:=wdStory
    Selection.PasteAndFormat (wdPasteDefault)
    Selection.MoveUp Unit:=wdLine, Count:=1
    Selection.SelectRow
    Selection.Font.Color = wdColorGray25
    Selection.MoveDown Unit:=wdLine, Count:=1
    OpenClipboard 0&
    EmptyClipboard
    CloseClipboard
End Sub
Sub Макрос2()
'
' Макрос2 Макрос
' Макрос записан 26.11.2010 admin
'
    Selection.Rows.Delete
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveUp Unit:=wdLine, Count:=1
End Sub
Sub Макрос3()
'
' Макрос3 Макрос
' Макрос записан 26.11.2010 admin
'
    Selection.InsertRowsAbove 1
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.MoveUp Unit:=wdLine, Count:=1
    Selection.PasteAndFormat (wdPasteDefault)
    Selection.MoveLeft Unit:=wdCell
    Selection.MoveRight Unit:=wdCell
    Selection.Font.Size = 8
    Selection.MoveDown Unit:=wdLine, Count:=1
End Sub
Sub Макрос5()
'
' Макрос5 Макрос
' Макрос записан 01.12.2010 admin
'
    Selection.MoveLeft Unit:=wdCell
    Selection.MoveRight Unit:=wdCell
    Selection.MoveRight Unit:=wdCharacter, Count:=3, Extend:=wdExtend
    Selection.Copy
    Selection.Rows.Delete
    Selection.HomeKey Unit:=wdStory
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.Tables(1).Select
    Selection.MoveDown Unit:=wdLine, Count:=2
    Selection.Tables(1).Select
    Selection.MoveDown Unit:=wdLine, Count:=4
    Selection.InsertRowsAbove 1
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.MoveUp Unit:=wdLine, Count:=1
    Selection.Paste
    Selection.MoveLeft Unit:=wdCell
    Selection.MoveRight Unit:=wdCell
    Selection.Range.HighlightColorIndex = wdYellow
    Selection.MoveDown Unit:=wdLine, Count:=1
End Sub
Sub Макрос4()
'
' Макрос4 Макрос
' Макрос записан 01.12.2010 admin
'
    Selection.HomeKey Unit:=wdStory
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.Tables(1).Select
    Selection.MoveDown Unit:=wdLine, Count:=2
    Selection.Tables(1).Select
    Selection.MoveDown Unit:=wdLine, Count:=4
    Selection.InsertRowsAbove 1
    Selection.MoveUp Unit:=wdLine, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.PasteAndFormat (wdPasteDefault)
    Selection.MoveLeft Unit:=wdCell
    Selection.MoveRight Unit:=wdCell
    Selection.Font.Size = 8
    Selection.MoveDown Unit:=wdLine, Count:=1
End Sub
Sub Макрос6()
'
' Макрос6 Макрос
' Макрос записан 02.12.2010 admin
'
    Selection.MoveLeft Unit:=wdCell
    Selection.MoveRight Unit:=wdCell
    Selection.Font.Size = 8
    Selection.MoveDown Unit:=wdLine, Count:=1
End Sub
Sub Макрос7()
'
' Макрос7 Макрос
' Макрос записан 11.12.2010 admin
'
    Selection.Tables(1).Select
    Selection.Rows.ConvertToText Separator:=wdSeparateByDefaultListSeparator, _
        NestedTables:=True
    Selection.MoveDown Unit:=wdLine, Count:=1
End Sub

Последний раз редактировалось Stilet; 19.12.2010 в 14:50.
Nik_2sv вне форума Ответить с цитированием
Старый 19.12.2010, 13:26   #10
stck
Пользователь
 
Аватар для stck
 
Регистрация: 14.06.2010
Сообщений: 84
По умолчанию

Ты немного не так вставил.)
Вот исправил кусок с очисткой:
Код:
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Sub ClearClipboard()
OpenClipboard 0&
EmptyClipboard
CloseClipboard
End Sub
Sub Макрос1()
' Макрос1 Макрос
' Макрос записан 18.12.2010 admin
'
Selection.SelectRow
Selection.Cut
Selection.EndKey Unit:=wdStory
Selection.PasteAndFormat (wdPasteDefault)
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.SelectRow
Selection.Font.Color = wdColorGray25
Selection.MoveDown Unit:=wdLine, Count:=1
ClearClipboard
End Sub
Sub Макрос2().....

Последний раз редактировалось stck; 19.12.2010 в 13:32.
stck вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И снова вопрос про автозаполнение документов Word hackPNZ Microsoft Office Word 4 20.10.2009 14:45
Вопрос оптимизации работы с MS Word Mixasik Общие вопросы Delphi 1 15.06.2009 12:13
Вопрос о связях Excel и Word nuzhnoff Помощь студентам 6 11.06.2009 15:05
Простой вопрос по Word Favor Microsoft Office Word 3 01.08.2008 07:29