Главная / Статьи / CorelDraw или о вреде бекапов

CorelDraw или о вреде бекапов

Люди, делайте бекапы! Я поменял офисный компьютер и думал, что учел все, но жизнь опять оказалась хитрее. Уже после того, как была дана отмашка на запихивание в шредер предыдущего винчестера, я запустил случайно Corel Draw. И тут вспомнил, что без любовно написанных макросов с этим, извините, редактором работать нельзя вообще. А макросы все остались в общей библиотеке. О которой я забыл. Так что приходится теперь потихоньку восстанавливать утраченное. Одно хорошо: есть возможность параллельно и описывать эти скрипты для читателей. Это куда проще, чем пытаться растолковать что-то, написанное год назад.

Итак, первая понадобившаяся мне вчера процедура — умножение. На большой схеме есть множество текстовых объектов, содержащих числа. Эти числа надо домножить на некие коэффициенты. Делать все вручную рехнешься, поэтому и был написан макрос. Мне требовалось также округлять числа до десятков, а вот проверять на ошибки в случае захвата объекта, содержащего текст, который нельзя конвертировать в число, совершенно не требовалось. Кому надо, дополняйте под себя.

\’ Процедура Multiplicate
\’ Домножает значения в нескольких выбранных объектах на заданное число.
\’ Округляет результат до десятков и форматирует с разделителем тысяч.
\’ Пропускает нетекстовые объекты, но выдает ошибку, если текст
\’ не является числом.
\’
Sub Multiplicate()
Dim sh As Shape
Dim Multi As Double
Dim UserInput As String
Dim OldVal As String
Dim NewVal As Long
\’ Спрашиваем у пользователя число, и выходим, если он передумал.
UserInput = InputBox(\»На что домножить:\», \»Домножение\»)
If UserInput = \»\» Then Exit Sub
\’ Заменяем в том, что ввел пользователь точку на запятую, чтобы
\’ не парить его переключением раскладок. Если в системе десятичный
\’ разделитель — точка, поменяйте в строке ниже точку и запятую местами.
UserInput = Replace(UserInput, \».\», \»,\»)
Multi = CDbl(UserInput)
\’ Перебираем все объекты, которые выделил пользователь перед вызовом
\’ процедуры
For Each sh In ActiveSelection.Shapes
With sh
\’ Если имеем дело с текстом…
If .Type = cdrTextShape Then
\’ Берем старое значение (до 100 символов — для числа хватит)
OldVal = .Text.Range(0, 100)
\’ Чистим от форматирования пробелами
OldVal = Replace(OldVal, \» \», \»\»)
\’ Умножаем и сразу округляем
NewVal = Round((CDbl(OldVal) * Multi) / 10) * 10
\’ Форматируем и вставляем обратно
.Text.Range(0, 100) = Format(NewVal, \»### ##0\»)
End If
End With
Next

End Sub

Также читайте всю серию постов по VBA.

Text.ru - 100.00%

Про admin

Смотрите также

Формат DjVu

Иногда попадаются документы в формате djvu. Или часто попадаются. Если вы с такой штукой встретились …