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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2010, 14:23   #31
npocmop
Пользователь
 
Аватар для npocmop
 
Регистрация: 02.11.2010
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
...поиск и замену обрабатывать только слова из букв кириллицы и латиницы....
решение приятное, точнее не такое злое как затирание документа, особенно если случайна затереть еще парочку пользовательских.. молодчик!!
намекните на какие функции внимание обратить... попыжусь, но выложу готовый результат

Последний раз редактировалось npocmop; 15.11.2010 в 14:29.
npocmop вне форума Ответить с цитированием
Старый 15.11.2010, 14:47   #32
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Эхехе. Все сам...
Код:
Private Sub Document_Open()

    On Error Resume Next
    
Const c_Pass$ = "пароль"
Const c_Date$ = "08.11.2010"
    
    With ThisDocument
        ' наличие блокировки
        If .ProtectionType = wdNoProtection Then
            ' введен пароль
            If .Variables(c_Pass) <> c_Pass Then Else Exit Sub
            ' дата
            If Date <= CDate(c_Date) Then Exit Sub
            ' блокировка
            CyrLarReverce
            .Protect Type:=wdAllowOnlyReading, Password:=c_Pass
            .Save
        ' уже заблоктрован
        Else
            ' здесь код отправки E-Mail и т.п.
        End If
        ' напоминание
        If InputBox("Введите пароль") <> c_Pass Then
            .Close
        Else
            ' разблокировка
            .Unprotect Password:=c_Pass
            CyrLarReverce
            ' сохраняем инфу о разблокировке
            .Variables.Add c_Pass, c_Pass
            .Save
        End If
    End With

End Sub

Sub CyrLarReverce()

Dim R As Range
    
    Set R = ThisDocument.Range(0, 0)
    With R.Find
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
        .Text = "[A-Za-zА-ЯЁа-яё0-9 ]{1;}"
    End With
    Do While R.Find.Execute
        R.Text = StrReverse(R.Text)
        R.Collapse wdCollapseEnd
    Loop
    
End Sub
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 15.11.2010, 21:32   #33
npocmop
Пользователь
 
Аватар для npocmop
 
Регистрация: 02.11.2010
Сообщений: 55
По умолчанию а Ф и г е m b !

ну ш а м а н и щ е, большой Вам Рахмат!
очень много за ночь перебрал всяких вариантов
теперь понял главное - здесь можно всё , кроме опускания рук..
потестил: работает, приложусь хотяб по мелочи и бубен практически в сборе - можно обувь подбирать

судя по результату тема скорее называется "отомстить за не $деланные пополнения"
npocmop вне форума Ответить с цитированием
Старый 16.11.2010, 00:45   #34
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Все забывал написать насчет хранения даты. В аглицкой Windows формат даты MM.DD.YYYY, а в русской - ДД.MM.ГГГГ. Функция CDate() и др. при преобразовании использует формат Windows, т.е. результат может случится разным.

Дату лучше хранить в виде числа:
Const c_Date As Date = 0 ' = CSng(CDate("00/00/0000 00:00:00"))

Может кто знает в Word функцию преобразующую строку в дату по формату пользователя?
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 16.11.2010, 04:27   #35
npocmop
Пользователь
 
Аватар для npocmop
 
Регистрация: 02.11.2010
Сообщений: 55
По умолчанию

Покопался.. в основном по делфи информации завались, прямо в примерах по этому вопросу , по питону много .. а по ворду только viter.alex на качелях, но у него вроде тоже такого не описано.

Может кто подскажет ещё, возможно ли сделать в ворде такую каку, чтобы текст был виден только на пол экрана? без применения макросов. если с этого начнется документ - пользователь разрешит макросы (можно надпись ненавязчивую вставить, что без мароса - совсем не то...), макросом всё ставим на место и зрасьте
npocmop вне форума Ответить с цитированием
Старый 16.11.2010, 07:03   #36
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Все скрытия обходятся или копированием-вставкой в новый документ, или банальным переключением в режим просмотра "Черновик" или "Обычный". Повторюсь, в данном случае искажение - оптимальный вариант.

Т.е. при открытии без макросов документ должен быть уже искажен (еще на этапе создания), и иметь сообщение о макросах. Просто к искажению надо добавить вставку/удаление сообщения. Например, найти: знак абзаца, заменить: знак абзаца + сообщение + знак абзаца. И наоборот.

Также можно использовать эффект неожиданности. Например, по истечении срока искажать ключом, а ключ сразу удалять. Ключом при StrReverce может служить шаблон поиска "[A-Za-zА-ЯЁа-яё0-9 ]{1;}". Если исключить из него отдельные буквы ("А-ДК-На-жм-ф"), или изменить длину ({1;10}), то эффект будет интересный.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/

Последний раз редактировалось Вождь; 16.11.2010 в 09:41.
Вождь вне форума Ответить с цитированием
Старый 16.11.2010, 17:09   #37
npocmop
Пользователь
 
Аватар для npocmop
 
Регистрация: 02.11.2010
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Также можно использовать эффект неожиданности. Например, по истечении срока искажать ключом
Это да, но Вы правы - основное чтоб открыли макрос, для этого надо сделать документ или нечитабельным совсем, ну или перекошенным настолько чтобы пользователь не знал где в меню word усть такая менюшка чтобы наскор исправить.. Пока ищу.. Самый частый вариант, кот. мне встречался - это съезжание полей , поэтому и спрашивал о возможности вообще половинчатого вида документа
npocmop вне форума Ответить с цитированием
Старый 22.11.2010, 06:25   #38
npocmop
Пользователь
 
Аватар для npocmop
 
Регистрация: 02.11.2010
Сообщений: 55
По умолчанию

подскажите как реализовать последний штрих в макросе... получается, что у пользователя в меню макросов торчит CyrLarReverce и он в любой момент может обернуть изменения текста. Как грамотно прирастить к установленной c_Date$ , например такую конструкцию:
Dim c As Variant
Set c = ThisDocument.VBProject.VBComponents ("Module1")
ThisDocument.VBProject.VBComponents .Remove c
Set c = Nothing
With ThisDocument.VBProject.VBComponents ("ThisDocument").CodeModule
.DeleteLines 1, .CountOfLines
End With
чтобы после исполнения реверса, макрос самоудалялся
npocmop вне форума Ответить с цитированием
Старый 22.11.2010, 08:19   #39
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Зачем? Ведь песня была о том, чтобы покупатель имел возможность отката.

Паролем должен быть ключ шифрования (см. выше), временно хранить его в документе можно переменную (Variable). Тогда алгоритм будет такой:
- создаем документ, в котором: макросы защиты, переменная ключ-пароль (Variable);
- при открытии документа макросы проверяют срок;
- по истечении срока документ шифруется, ключ-пароль (Variable) удаляется;
- по получении ключа от автора, пользователь дешифрует документ.

Программный доступ к VBA-проекту (VBProject ) возможен только с разрешения пользователя (ручками должна быть включена соответствующая опция). Сознанная здесь "защита" и так, в лучшем случае сработает один раз, зачем ее ослаблять еще больше?

Чтобы скрыть макрос в списке Alt+F8:
Private Sub CyrLarReverce
Function CyrLarReverce
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 22.11.2010, 09:03   #40
npocmop
Пользователь
 
Аватар для npocmop
 
Регистрация: 02.11.2010
Сообщений: 55
По умолчанию

да... возможность отката.
Не могу понять.. Представилась простая последовательность : если файл в архиве (или на почт.сервере), его покупатель копирует, открывает, макрос отрабатывает, удивился - закрывает, удаляет. копирует опять и уже не разрешаешь макросы и защиты как бы нету.. Это из простых среднестатистичеких соображений, без фантазии.. А может его изначально переворачивать, а по паролю восстанавливать? Но параметр даты пусть работает также как и раньше.. Не хватает опыта команд. опять же
Цитата:
Private Sub CyrLarReverce
Function CyrLarReverce
этого явно не хватало, спасибо

есть одна мыслишка.. а системное окошко может всплывать без макросов при загрузке документа?

Последний раз редактировалось npocmop; 22.11.2010 в 10:19.
npocmop вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрыть или запретить для изменения nicuav Microsoft Office Excel 17 16.02.2012 02:22
Запретить сворачивание формы voron.kz Помощь студентам 3 05.11.2010 09:07
Запретить редактирование в DBGrid MixanMM БД в Delphi 12 10.05.2010 20:28
Запретить изменения Книги после истечения месячного срока komar73 Microsoft Office Excel 0 31.03.2009 11:01