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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 21:08   #1
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
Вопрос Шифрование Word+Macros Не получается

Доброго времени суток всем!
По поиску нашел вот что но все равно это не то что мне понадобится

http://programmersforum.ru/showthrea...E5%E7%E0%F0%FF
http://programmersforum.ru/showthrea...E2%E0%ED%E8%E5

Вот такая задача выдалась - Хочу написать макрос скажем для шифрование по методу цезаря.
Я предпринял вот что
1.
Код:
Sub Macro1()

Dim S1 As String
    Selection.MoveRight Unit:=wdCharacter, count:=1, Extend:=wdExtend
    S1 = Selection.Text
    Selection.Text = ChrW(S1 + 3)
End Sub
Можно патом его в цыкл и вроде все должно получатся но нет! не получается! Выдает ошибку 13 "Selection.Text = ChrW(S1 + 3)"

2. Вот еще один вариант только на этот раз испоьзовал "поиск/замена"
но тоже не получается.

Код:
Sub Macro2()
Dim S1

S1 = 4300

    Do While S1 <= 4400
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(S1)
        .Replacement.Text = ChrW(S1 + 3)
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    S1 = S1 + 1
    
    Loop
End Sub

Видимо иду не по правильном пути

Помогите как все организовать пожалуйсто
Огромное спасибо заранее....
chugo вне форума Ответить с цитированием
Старый 20.10.2009, 00:46   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Вот так, как-то
Код:
Sub ШифрЦезаря()
  Dim sStrIn As String
  Dim sStrOut As String
  Dim i As Long
  
  sStrIn = Selection.Text
  If Len(Selection.Text) < 1 Then Exit Sub
  For i = 1 To Len(sStrIn)
    sStrOut = sStrOut & ChrW(AscW(Mid(sStrIn, i, 1)) + 3)
    Debug.Print sStrOut
  Next
  Selection.Text = sStrOut
End Sub
Только нужно еще проверку сделать, чтобы не выходить за пределы алфавита, т.е. если буква «я», то из нее нужно сделать «в» и т.д. Ну и не трогать наверное небуквенные символы.
Коды русских букв (шестнадцатиричные):
  • заглавные буквы: 410-415 для А — Е, 401 для Ё, 416-42F для Ж — Я;
  • строчные буквы: 430-435 для а — е, 451 для ё, 436-44F для ж — я.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 20.10.2009 в 00:55.
viter.alex вне форума Ответить с цитированием
Старый 20.10.2009, 03:32   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Ну как там у вас, получается что-то?

Вот ещё образчик сдвига по кодам.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 20.10.2009, 12:50   #4
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Вот так, как-то...
Огромное спасибо!
Выручил...

У нас лекторша обяснает шифрование и не понимает что надо ещо показать ученикам как это реально работает. (По всем признакам видно что наизусть знает все)

Вот сейчас добавлю форму и кнопочки "шифрование дешифрование" и покажу как это работает
chugo вне форума Ответить с цитированием
Старый 21.10.2009, 14:24   #5
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

viter.alex
Вот еще вариант только по сложнее шифр Вижинера (основан на шивре Цезаря)

Код:
Private Sub Bot_Viziner_Click()

Dim sStrIn As String
Dim sStrOut As String
Dim LenX As String
Dim i, j As Long

'ProgressBar = 0
    
If OptionShifr_Viz.Value = True Then
      
    sStrIn = Selection.Text
    j = 1
      If Len(Selection.Text) < 1 Then Exit Sub
      For i = 1 To Len(sStrIn)
        LenX = Mid(Box_Viz.Text, j, 1)
        sStrOut = sStrOut & ChrW(AscW(Mid(sStrIn, i, 1)) + Asc(LenX))
            If j = Len(Box_Viz.Text) Then
                j = 1
            Else
                j = j + 1
            End If
        Debug.Print sStrOut
      Next
      Selection.Text = sStrOut
End If
    
End Sub
Здесь "Box_Viz.Text" это TextBox
chugo вне форума Ответить с цитированием
Старый 21.10.2009, 14:47   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Спасибо за заботу. Думаю, что вскоре пригодится.
Дам совет. Компоненты на форме удобно называть, ставя впереди префикс, обозначающий тип компонента. Например txtBox_Viz для текстового поля, opbShifr_Viz для radiobutton и т.д. После этого в коде, когда тебе нужно будет получить, например, доступ к свойствам текстового поля, то нужно только набрать txt и получишь выпадающий список со всеми текстовыми полями на форме. Если их много, то помнить каждое затруднительно
Ждем реализации более продвинутых алгоритмов шифрования!
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 22.10.2009, 11:54   #7
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

Вот в принципе РЕЛИЗ название пока не смог предумать

Сейчас думаю как написать макрос шифрировании по алгоритму Диффи-Хеллмана-Меркле. только вот когда пересмотрел страшно стало


http://ru.wikipedia.org/wiki/RSA
Изображения
Тип файла: jpg 2009-10-22_115345.jpg (16.2 Кб, 153 просмотров)
Вложения
Тип файла: zip Шифрация_Дешифрация.zip (22.3 Кб, 43 просмотров)
chugo вне форума Ответить с цитированием
Старый 27.11.2009, 22:10   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Удивительно, что приложенная картинка более популярна, чем сама ваша программа!

Там всё красиво, но я заметил, что после переключения с шифрования на дешифрование (по-русски это вообще?..) срабатывает ещё один раз та функция, от которой мы ушли.

И почему бы не дать возможность переключаться между формой и документом (установить ShowModal=False) — чтобы выделять нужный текст? Тем более форма как раз и просит это сделать.

Такой релиз, из всех учащихся СНГ, по силам, может быть, ещё человекам 100 — так будьте же лучшим!!!
Sasha_Smirnov вне форума Ответить с цитированием
Старый 28.11.2009, 00:21   #9
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
(установить ShowModal=False)
Замечание правильное!

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
по-русски это вообще?..
Может поставить так? (КОДИРОВАНИЕ ДЕКОДИРОВАНИЕ)
chugo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Macros для нахождения и удаления слов конгер Microsoft Office Word 1 13.10.2009 18:14
Работать в Word, не открывая документы (работа с закрытыми документами Word) Георгиевич Microsoft Office Word 10 07.09.2009 11:19
Macros Mylips Microsoft Office Excel 10 13.03.2009 18:05
Joining Two Macros london735 Microsoft Office Excel 13 29.06.2008 18:37