Страница 1 из 1

Помогите с написанием макроса для Word,который преобразует кодировку текста из указан

Добавлено: 30 май 2009, 21:39
Сотников Роман
задали такое задание,я сделал так:
Sub Kodirovka()
'
' Kodirovka Макрос
'
'
ChangeFileOpenDirectory "C:\Documents and Settings\Admin\Рабочий стол\"
ActiveDocument.SaveAs FileName:="kodirovka.txt", FileFormat:=wdFormatText, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False, Encoding:=1251, InsertLineBreaks:=False, AllowSubstitutions:=False _
, LineEnding:=wdCRLF
ActiveDocument.Close
Documents.Open FileName:="kodirovka.txt", ConfirmConversions:=False, _
ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:="", _
Encoding:=874
ActiveDocument.SaveAs FileName:="kodirovka.doc", FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
End Sub
Преподаватель сказал что это неправильно и нужно сделать с помощью цикла по всем символам в документе,который меняет символы одной кодировки на другую.Как сделать это даже не представляю(в универе изучаем C++),помогите кто может.

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 30 май 2009, 23:18
Teslenko_EA
Здравствуйте Сотников Роман.
для простого "перебора" можно использовать подобную функцию:

Код: Выделить всё

Function sConverting(sSource$, Optional bToKOI As Boolean) As String
Dim i%, j&, q%, sS$, sD$
Const KoiCodePage$ = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдежзийклмнопрстуфхцчшщьыъэюя"
Const WinCodePage$ = "бвчздецъйклмнопртуфхжигюыэшщяьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭШЩЯЬАС"
sS = IIf(bToKOI, KoiCodePage, WinCodePage): sD = IIf(bToKOI, WinCodePage, KoiCodePage)
q = Len(sS): j = Len(sSource)
For j = 1 To Len(sSource)
    s = Mid(sSource, j, 1)
    For i = 1 To q
        If s = Mid(sS, i, 1) Then s = Mid(sD, i, 1): Exit For
    Next i
    sConverting = sConverting + s
Next
End Function
Евгений.

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 30 май 2009, 23:35
Сотников Роман
Спасибо Евгений,я думаю это то что мне нужно,только если можно напишите полный код макроса,т.к при вставке вашей ф-ии в чистый код макроса вылетает ошибка: expected end sub(просто в vba я ничего не смыслю :) )

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 30 май 2009, 23:49
Teslenko_EA
Сотников Роман, применение функции может быть таким:

Код: Выделить всё

Sub Макрос1()
Dim s$
s = Selection
Selection = sConverting(s, True) 'False, True ->  KOI-Win, Win-KOI
End Sub
Евгений.

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 31 май 2009, 00:17
Сотников Роман
Teslenko_EA,если можно поясните как работает функция(хотя бы в кратце)

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 31 май 2009, 09:32
Teslenko_EA
Здравствуйте Сотников Роман.
любая функция способна возвратить значение.
sConverting возвращает значение типа String, аргументы передаваемые ей: sSource - исходный текст, булевый bToKOI False или True - направление конвертации:

Код: Выделить всё

...
For j = 1 To Len(sSource) ' посимвольный перебор в цикле исходного текста
    s = Mid(sSource, j, 1) ' выбор очередного символа
    For i = 1 To q
        If s = Mid(sS, i, 1) Then s = Mid(sD, i, 1) ' перебор набора кодировки, сравнение символа, 
        'в случае совпадения - замена на символ с тем же номером из другого набора кодировки 
    Next i
    sConverting = sConverting + s ' сборка возвращаемого значения
...
вызывается изпроцедуры:

Код: Выделить всё

Sub Макрос1()
Dim s$
s = Selection 'переменной - выделенный текст
s = sConverting(s, True) 'False, True ->  KOI-Win, Win-KOI
Selection = s 'выделение заменить конвертированным текстом 
End Sub
Исполнение может быть таким - выделить текст, вызывать процедуру Макрос1. Подобной функцией можно выполнять конвертацию любой кодировки, обрабатывая соответствующий набор символов.
Евгений.

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 31 май 2009, 14:14
Сотников Роман
Здравствуйте Teslenko_EA.Написал отчет по заданию:
Задание кафедры:
Написать макрос для преобразования кодировки текста из указанной в
указанную.
Принцип работы макроса:
Макрос работает на основе функции написанной на языке программирования VBA.Объявляется переменная s. Затем этой переменной присваивается значение выделенного текста. После этого значению выделенного текста присваивается значение функции с аргументами s(выделенный текст) и True(перевод из KOI->Win).
Код макроса:
Sub Kodirovka()
Dim s$
s = Selection
Selection = sConverting(s, True) 'True,False -> KOI-Win, Win-KOI
End Sub
Принцип работы функции:
Объявляется функция sConverting с возвращаемым значением типа String и с аргументами: sSource$(исходный текст) типа String, bToKOI(служит для выбора направления конвертации) типа Boolean.
В теле функции инициализируются переменные i, j, q, sS, sD, а также постоянные KoiCodePage и WinCodePage(символы с одинаковыми порядковыми номерами в строке эквивалентны друг другу в таблицах кодирования KOI8-r и Windows(1251)) типа String.
« sS = IIf(bToKOI, KoiCodePage, WinCodePage)»- осуществляет выбор из какой кодировки осуществлять перекодировку.
«sD = IIf(bToKOI, WinCodePage, KoiCodePage)»- осуществляет выбор в какую кодировку осуществлять перекодировку.
«q = Len(sS): j = Len(sSource)»- присваивание переменным q и j значений длин строк sS и sSourse соответственно.
С помощью цикла «For j = 1 To Len(sSource)…Next» -происходит посимвольный перебор исходного текста. Строка «s = Mid(sSource, j, 1)» служит для выбора очередного символа в тексте.
Цикл «For i = 1 To q … Next i» нужен для перебора набора кодировки.
«If s = Mid(sS, i, 1) Then s = Mid(sD, i, 1): Exit For»- сравнение символа, в случае совпадения- замена на символ с тем же номером из другого набора кодировки.
«sConverting = sConverting + s»- сборка возвращаемого текста, происходит в первом цикле.
«End Function»- конец функции.
Код функции:
Function sConverting(sSource$, Optional bToKOI As Boolean) As String
Dim i%, j&, q%, sS$, sD$
Const KoiCodePage$ = "юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
Const WinCodePage$ = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдежзийклмнопрстуфхцчшщьыъэюя"
sS = IIf(bToKOI, KoiCodePage, WinCodePage)
sD = IIf(bToKOI, WinCodePage, KoiCodePage)
q = Len(sS): j = Len(sSource)
For j = 1 To Len(sSource)
s = Mid(sSource, j, 1)
For i = 1 To q
If s = Mid(sS, i, 1) Then s = Mid(sD, i, 1): Exit For
Next i
sConverting = sConverting + s
Next
End Function
Непонятны 2 строки:"Dim i%, j&, q%, sS$, sD$" и "q = Len(sS): j = Len(sSource)". Объясните их пожалуйста.

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 31 май 2009, 16:46
Teslenko_EA
Dim i%, j&, q%, sS$, sD$
замените на понятный Вам и преподавателю аналог:
Dim i As Integer, q As Integer, j As Long, sS As String, sD As String - объявления переменных
q = Len(sS) - переменной присваивается значение длины текста в переменной sS
: - разделитель команд расположенных в одной строке
j - аналогично q
Евгений.

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 31 май 2009, 18:23
Сотников Роман
огромное спасибо Teslenko_EA,теперь меня не отчислят :D

Re: Помогите с написанием макроса для Word,который преобразует кодировку текста из ук

Добавлено: 17 июн 2009, 17:43
Ira_olh
Здравствуйте, я тут у вас новичок!
Помогите написать макрос в Ворде
Надо сделать при нажатиии одной кнопки и получить, например, 10 страниц.
Спасибо!
и еще:
мне нужна нумерация
0001-0500
как ее реализовать!