Помогите пожалуйста со скриптом для Word. Вот посоветовали скрипт для замены шрифтов в разброс но почему то когда запускаю скрипт то Word зависает. Суть скрипта подогнать конспекты под рукописный текст путем замены некоторых букв другими шрифтами.
[vba]
Код
Sub RandomFont() Application.ScreenUpdating = False
Set objDoc = ActiveDocument Set objRandom = CreateObject("System.Random")
Set objRange = objDoc.Range() Set colCharacters = objRange.Characters
For Each strCharacter In colCharacters 'strCharacter.Font.Reset strCharacter.Font.Scaling = 100 + objRandom.Next_2(-50, 50) / 8 'разброс ширины шрифта strCharacter.Font.Position = objRandom.Next_2(-200, 300) / 700 'разброс позиции относительно базовой линии strCharacter.Font.Size = strCharacter.Font.Size + objRandom.Next_2(-300, 400) / 400 'разброс размеров шрифта strCharacter.Font.Kerning = 12 + objRandom.Next_2(-10, 40) / 5 'разброс кернинга Select Case objRandom.Next_2(1, 5) 'рандомный шрифт Case 1 strCharacter.Font.Name = "ZimM-1" Case 2 strCharacter.Font.Name = "ZimM-2" Case 3 strCharacter.Font.Name = "ZimM-3" Case 4 strCharacter.Font.Name = "ZimM-4" End Select Next
Application.ScreenUpdating = True End Sub
[/vba]
Помогите пожалуйста со скриптом для Word. Вот посоветовали скрипт для замены шрифтов в разброс но почему то когда запускаю скрипт то Word зависает. Суть скрипта подогнать конспекты под рукописный текст путем замены некоторых букв другими шрифтами.
[vba]
Код
Sub RandomFont() Application.ScreenUpdating = False
Set objDoc = ActiveDocument Set objRandom = CreateObject("System.Random")
Set objRange = objDoc.Range() Set colCharacters = objRange.Characters
For Each strCharacter In colCharacters 'strCharacter.Font.Reset strCharacter.Font.Scaling = 100 + objRandom.Next_2(-50, 50) / 8 'разброс ширины шрифта strCharacter.Font.Position = objRandom.Next_2(-200, 300) / 700 'разброс позиции относительно базовой линии strCharacter.Font.Size = strCharacter.Font.Size + objRandom.Next_2(-300, 400) / 400 'разброс размеров шрифта strCharacter.Font.Kerning = 12 + objRandom.Next_2(-10, 40) / 5 'разброс кернинга Select Case objRandom.Next_2(1, 5) 'рандомный шрифт Case 1 strCharacter.Font.Name = "ZimM-1" Case 2 strCharacter.Font.Name = "ZimM-2" Case 3 strCharacter.Font.Name = "ZimM-3" Case 4 strCharacter.Font.Name = "ZimM-4" End Select Next
Подключите библиотеку System (Tools ->References найдите в списке и поставить гульку на System) Но жутко тормозной код. Зачем нужно использовать объект "System.Random" я понятия не имею. И искать его синтаксис и свойства - ни какого желания. Но я сильно подозреваю, что он мало чем отличается от стандартной встроенной в VBA функции Rnd Вот так - то же самое, но тоже циклится цикл почему-то:[vba]
Код
Sub RandomFont2() Dim xChar ' Application.ScreenUpdating = False
For Each xChar In ActiveDocument.Range.Characters ' xChar.Font.Reset ' xChar.Font.Scaling = 100 + fRnd(-50, 50) / 8 'разброс ширины шрифта ' xChar.Font.Position = fRnd(-200, 300) / 700 'разброс позиции относительно базовой линии ' xChar.Font.Size = xChar.Font.Size + fRnd(-300, 400) / 400 'разброс размеров шрифта ' xChar.Font.Kerning = 12 + fRnd(-10, 40) / 5 'разброс кернинга Select Case fRnd(1, 5) 'рандомный шрифт Case 1 xChar.Font.Name = "Arial" Case 2 xChar.Font.Name = "Calibri" Case 3 xChar.Font.Name = "Times New Roman" Case 4 xChar.Font.Name = "Monotype Corsiva" End Select Next
' Application.ScreenUpdating = True End Sub
Function fRnd%(iMin%, iMax%) fRnd = Int((iMax * Rnd) + iMin) End Function
[/vba]надо разбираться
Подключите библиотеку System (Tools ->References найдите в списке и поставить гульку на System) Но жутко тормозной код. Зачем нужно использовать объект "System.Random" я понятия не имею. И искать его синтаксис и свойства - ни какого желания. Но я сильно подозреваю, что он мало чем отличается от стандартной встроенной в VBA функции Rnd Вот так - то же самое, но тоже циклится цикл почему-то:[vba]
Код
Sub RandomFont2() Dim xChar ' Application.ScreenUpdating = False
For Each xChar In ActiveDocument.Range.Characters ' xChar.Font.Reset ' xChar.Font.Scaling = 100 + fRnd(-50, 50) / 8 'разброс ширины шрифта ' xChar.Font.Position = fRnd(-200, 300) / 700 'разброс позиции относительно базовой линии ' xChar.Font.Size = xChar.Font.Size + fRnd(-300, 400) / 400 'разброс размеров шрифта ' xChar.Font.Kerning = 12 + fRnd(-10, 40) / 5 'разброс кернинга Select Case fRnd(1, 5) 'рандомный шрифт Case 1 xChar.Font.Name = "Arial" Case 2 xChar.Font.Name = "Calibri" Case 3 xChar.Font.Name = "Times New Roman" Case 4 xChar.Font.Name = "Monotype Corsiva" End Select Next
' Application.ScreenUpdating = True End Sub
Function fRnd%(iMin%, iMax%) fRnd = Int((iMax * Rnd) + iMin) End Function
Дома протестировал. Ничего не циклится. Просто объект .Font почему-то жутко тормозит даже при самых простых операциях. Для примера ограничил область действия макроса только выделенным текстом. Но всё равно даже при выделении всего пары строк ждать приходится больше минуты.[vba]
Код
Sub RandomFont() Dim xChar As Range, Start As Single 'Start = Timer Application.ScreenUpdating = False For Each xChar In Selection.Range.Characters 'xChar.Font.Reset xChar.Font.Scaling = 100 + fRnd(-50, 50) / 8 'разброс ширины шрифта xChar.Font.Position = fRnd(-200, 300) / 700 'разброс позиции относительно базовой линии xChar.Font.Size = xChar.Font.Size + fRnd(-300, 400) / 400 'разброс размеров шрифта xChar.Font.Kerning = 12 + fRnd(-10, 40) / 5 'разброс кернинга xChar.Font.Name = Choose(fRnd(1, 4), "Arial", "Calibri", "Times New Roman", "Monotype Corsiva") 'рандомный шрифт Next 'Debug.Print Timer - Start Application.ScreenUpdating = True End Sub
[/vba]
Дома протестировал. Ничего не циклится. Просто объект .Font почему-то жутко тормозит даже при самых простых операциях. Для примера ограничил область действия макроса только выделенным текстом. Но всё равно даже при выделении всего пары строк ждать приходится больше минуты.[vba]
Код
Sub RandomFont() Dim xChar As Range, Start As Single 'Start = Timer Application.ScreenUpdating = False For Each xChar In Selection.Range.Characters 'xChar.Font.Reset xChar.Font.Scaling = 100 + fRnd(-50, 50) / 8 'разброс ширины шрифта xChar.Font.Position = fRnd(-200, 300) / 700 'разброс позиции относительно базовой линии xChar.Font.Size = xChar.Font.Size + fRnd(-300, 400) / 400 'разброс размеров шрифта xChar.Font.Kerning = 12 + fRnd(-10, 40) / 5 'разброс кернинга xChar.Font.Name = Choose(fRnd(1, 4), "Arial", "Calibri", "Times New Roman", "Monotype Corsiva") 'рандомный шрифт Next 'Debug.Print Timer - Start Application.ScreenUpdating = True End Sub