Помогите с написанием макроса для Word,который преобразует кодировку текста из указан
Модератор: Naeel Maqsudov
-
- Сообщения: 5
- Зарегистрирован: 30 май 2009, 21:35
задали такое задание,я сделал так:
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++),помогите кто может.
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++),помогите кто может.
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте Сотников Роман.
для простого "перебора" можно использовать подобную функцию:Евгений.
для простого "перебора" можно использовать подобную функцию:
Код: Выделить всё
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
-
- Сообщения: 5
- Зарегистрирован: 30 май 2009, 21:35
Спасибо Евгений,я думаю это то что мне нужно,только если можно напишите полный код макроса,т.к при вставке вашей ф-ии в чистый код макроса вылетает ошибка: expected end sub(просто в vba я ничего не смыслю
)

-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Сотников Роман, применение функции может быть таким:Евгений.
Код: Выделить всё
Sub Макрос1()
Dim s$
s = Selection
Selection = sConverting(s, True) 'False, True -> KOI-Win, Win-KOI
End Sub
-
- Сообщения: 5
- Зарегистрирован: 30 май 2009, 21:35
Teslenko_EA,если можно поясните как работает функция(хотя бы в кратце)
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
Здравствуйте Сотников Роман.
любая функция способна возвратить значение.
sConverting возвращает значение типа String, аргументы передаваемые ей: sSource - исходный текст, булевый bToKOI False или True - направление конвертации:вызывается изпроцедуры:Исполнение может быть таким - выделить текст, вызывать процедуру Макрос1. Подобной функцией можно выполнять конвертацию любой кодировки, обрабатывая соответствующий набор символов.
Евгений.
любая функция способна возвратить значение.
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
Евгений.
-
- Сообщения: 5
- Зарегистрирован: 30 май 2009, 21:35
Здравствуйте Teslenko_EA.Написал отчет по заданию:
Непонятны 2 строки:"Dim i%, j&, q%, sS$, sD$" и "q = Len(sS): j = Len(sSource)". Объясните их пожалуйста.Задание кафедры:
Написать макрос для преобразования кодировки текста из указанной в
указанную.
Принцип работы макроса:
Макрос работает на основе функции написанной на языке программирования 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
-
- Сообщения: 526
- Зарегистрирован: 04 фев 2007, 18:37
- Откуда: Сургут
- Контактная информация:
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
Евгений.
замените на понятный Вам и преподавателю аналог:
Dim i As Integer, q As Integer, j As Long, sS As String, sD As String - объявления переменных
q = Len(sS) - переменной присваивается значение длины текста в переменной sS
: - разделитель команд расположенных в одной строке
j - аналогично q
Евгений.
-
- Сообщения: 5
- Зарегистрирован: 30 май 2009, 21:35
огромное спасибо Teslenko_EA,теперь меня не отчислят 

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