1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Автоматический счётчик в Corel

Тема в разделе "CorelDraw", создана пользователем -, 18 мар 2003.

Модераторы: Артер
  1. Guest

    Ситуция такова:
    каждый день печатаются куча картинок из Corel. На картинках есть элемент "Текст", который показывает номер по порядку кртинки. Номера каждый раз приходится исправлять, т.е. было 100 - стало 101, было 101 - стало 102 и т.д. в огромном количестве. Естественно это очень большие затраты времени, хотя из всего рисунка меняется именно только порядковый номер.
    Есть ли какие то средства, какие бы позволили автоматически менять эти номера (допустим +1 к предыдущему номеру) например при открытии этого рисунка? Или нажал кнопку и они поменялись. Одним словом автоматизировать.

    Спасибо
     
  2. Guest

    Неужели все ПАС ?!!
     
  3. Guest

    Учи и используй VBA
     
  4. Guest

    Вот тебе простенький макрос.
    Скопируй приведенный ниже модуль в буфер обмена.
    Запусти Корел 9, 10, 11.
    В меню выбери: Tools => Visual Basic => Visual Basic Editor...
    Далее.

    В окне Project выбери GlobalMacros и перейди в папку Modules
    В меню VBA выбери: Insert =>Module
    Появится новый модуль навроде Module1, щелкни правой кнопкой и выбери
    View Code, перейди на окно кода и впаяй код из буфера
    В свойствах модуля поменяй имя: например - Counter
    Сохрани все.

    Потом в Кореле сооруди себе кнопочку и через нее будешь запускать этот макрос. Но учти:
    1. Макрос работает только если выделен один объект Artistic or Paragraph.
    2. Текст должен содержать только цифры (целые числа).
    3. Зашиты от ошибок нет. Если будет выделен другой объект: квадроат, элипс и т.д. то получишь сообщение об ошибке и все тормознется.

    Удачи...
     
  5. Guest

    А вот и сам макрос

    Sub Counter()
    Dim NumberText As String, Numer As Integer
    With ActiveShape.Text
    NumberText = .Contents(cdrAllFrames)
    Numer = Val(NumberText)
    Numer = Numer + 1
    NumberText = Str(Numer)
    .Contents(cdrAllFrames) = NumberText
    End With
    End Sub

    Это так себе написано. По быстрому.
    Кому надо пользутесь, а кто может допишите по себя захват текстового объкта без предварительного выделения мышкой.
     
  6. Guest

    Дык, защита от ошибок элементарно делается:

    OnError (и какой-нибудь msgbox)
    Exit Sub
     
  7. Guest

    Спасибо!!!! Сделал! Работает!

    И еще один вопросик:
    если таких элементов "Text" на рисунке штук 10. И чтобы одновременно при нажатии этой кнопочки в каждом из них прибавлялось по единице, а?

    Просто это позарез надо, времени вникнуть в VB нет. После этого обязательно залезу разбираться.


    Спасибо!
     
  8. Guest

    И в дополнение:

    кроме этих элементов-счетчиков "Text" , на рисунке есть еще элементы "Text", но содержащие буквы. А нужно, чтобы менялись только элементы, которые отображают порядковый номер. Т.е. может им можно присвоить какие-то имена (нужным элементам) и выбирать для обработки только их?
    Или как?
     
  9. Guest

    Ну, конечно, хочется все сразу.

    Я еще и другую работу делаю...

    По поводу счетчика на все необходимые элементы, то мы поступим так:

    В Кореле, с помощью Менеджера Объектов, перетащи необходимые текстовые элементы на самый верх. Сегодня или завтра я допишу код для этих элементов, а тебе самому кое-что придется подправить, т.к. я не знаю сколько их на слое. Писать макрос на определение - что там: буквы или цифери - я думаю не стоит.

    Постараюсь сегодня записать.
     
  10. Guest

    Ок. Жду с нетерпением. ;) Спасибо!
     
  11. Guest

    Объектам в документе CorelDRAW! можно присваивать некое свойство NAME — это в Tools > Object Data Manager.
    Потом в VB можно для выбора объекта использовать след. конструкцию:

    Sub main()
    Dim S As Shape
    Set S = ActiveDocument.ActivePage.FindShape("Pupkin", cdrTextShape, , True)
    S.CreateSelection
    End Sub

    Сей фрагмент выбирает и выделяет в текущем документе тектстовый объект (в т.ч. и входящий в состав группы) с именем Pupkin.
     
  12. Guest

    Спасибо! Сделал!

    Учу VB ;)
     
  13. Guest

    Можно сделать и так как предложил Shyapa.

    Ниже переписанный код для любого количества объктов, расположенных на слое по порядку сверху-вниз. Самых верхний объект в Кореле имеет ID=1, второй ID=2 и т.д. Поэтому я и предложил перетащить необходимые объекты наверх. Теперь осталось определиться - сколько их. В данном примере их - 6.
    Это число стоит в начале цикла "For var=1 To 6". Подставь туда необходимое тебе число.

    Sub Counter()
    Dim var As Variant
    Dim NumberText As String, Numer As Single
    With ActivePage.Shapes
    For var = 1 To 6
    .Range(Array(var)).CreateSelection
    With ActiveShape.Text
    NumberText = .Contents(cdrAllFrames)
    Numer = Val(NumberText)
    Numer = Numer + 1
    NumberText = Str(Numer)
    .Contents(cdrAllFrames) = NumberText
    End With
    Next var
    End With
    MsgBox "Recount complete."
    End Sub



    Название макроса я не изменял, чтобы не возиться тебе с настройками кнопки. Изменился только тип переменной "Numer" для работы с большими числами.

    Удачи.
     
Модераторы: Артер

Поделиться этой страницей