CorelDRAW VBA Introduction

CorelDRAW VBA – Introdução

Você está em: Tutoriais > CorelDRAW VBA – Introdução

CorelDRAW VBA

Olá! Caro leitor neste artigo você irá ver uma introdução de como usar os recursos do VBA no CorelDRAW, por ser um assunto extenso e para quem não está acostumado com programação pode se tornar bem complexo, vai devagar na leitura, fique atento aos detalhes e use os comentários para colocar suas dúvidas. Este é o primeiro de muitos artigos que irei lançar ligados diretamente a automação de rotinas.

O que é VBA?

VBA – Visual Basic for Applications, é uma ferramenta desenvolvida pela Microsoft para dar mais opções de controle e edição de recursos em seus programas, por exemplo, Word ou Excel. O VBA atua como uma linguagem de programação à serviço do usuário, permitindo a automação de diversos processos dentro dos projetos desenvolvidos nos programas.

Se desejar saber mais sobre VBA já tem um artigo no site da Microsoft Introdução ao VBA.

Habilitando Editor VBA

Importante: Algumas informações a seguir podem estar dispostas de forma diferente, dependendo da versão do CorelDRAW que você esteja usando. A versão usada na criação desse artigo é 24.0.0.301 – 2022

Ao abrir o CorelDRAW clique no menu Janela, e você terá duas opções que podem ser utilizadas, para habilitar o Editor VBA

Scripts

Para ativar a ferramenta através de Janela de Encaixe, clique no menu Janela – Janelas de Encaixe – Scripts ou utilize o atalho Alt + Shift + F11.

Com a Janela Scripts ativa, clique com o botão direito em Visual Basic for Application e clique na opção Mostrar IDE…

Scripts

Macros

Se desejar pode optar por usar uma barra de ferramentas, clique no menu Janela – Barra de Ferramentas Macros.

Você também pode chamar os recursos através do menu Ferramentas – Scripts – Editor de Script, ou use o atalho Alt + F11.

A Janela do Visual Basic for Applications irá aparecer, semelhante a imagem

A imagem mostra a aparência do Editor VBA na primeira vez em que é aberto. A janela do VBA aparecerá dividia em três sub janelas duas janelas menores localizadas a esquerda e a terceira janela à direita. A primeira janela a esquerda em cima é a janela de “Projeto”, abaixo dela está a janela “Propriedades”. A janela grande é para trabalhar com os códigos.

VBA IDE

Você pode ajustar o tamanho das janelas indo nas áreas de ajustes onde as janelas são divididas, assim como, demonstrado na imagem.

As janelas também podem ser realocadas para outros locais na tela, por exemplo, você pode posicionar as janelas que estão ao lado esquerdo para o lado direito.

Existem outras janelas que também podem ser selecionadas via Janela de Exibição, sendo elas:

  • Janela Imediata
  • Janela de Locais
  • Janela de Observação

Arquivos de Código VBA

Os arquivos de código VBA que você cria podem ser selecionados na janela “Projetos”. Existem pelo menos 2 pastas onde os arquivos de código podem ser armazenados. Por padrão podem ser encontrados na pasta “GlobalMacros” e a pasta de projeto VBA.

Pasta GlobalMacros

É onde o código pode ser armazenado para que esteja disponível para ser executado sempre que o CorelDRAW for aberto. Ele não requer que um documento Corel específico esteja aberto.

Pasta Projeto VBA

Este tipo de código será armazenado junto ao documento que está trabalhando. Uma vez salvo, o nome do projeto VBA mudará para o nome do arquivo salvo, portanto, ele só estará disponível quando esse arquivo Corel específico estiver aberto.

Janela de Código

A Janela de Código possui dois títulos “Geral” localizado a esquerda e “Declarações” à direita. Abaixo dos títulos está a janela de código e é onde o arquivo de código pode ser escrito e lido.

Option Explicit

Option Explicit deve estar na parte superior do código em cada janela de código. Você pode digitá-lo, mas ele pode aparecer automaticamente por padrão. Para exibir clique no menu Ferramentas, Opções marque a opção Exigir declaração de variável.

Não é absolutamente necessário, mas reduzirá o número de erros que você comete e, enquanto você escreve o código, o Editor VBA o ajudará fornecendo caixas de listagem de métodos e propriedades possíveis.

Option Explicit significa que, se você criar quaisquer nomes, também conhecidos como variáveis, para representar algo como uma forma, por exemplo, “Retangulo”, você deve especificar que é uma forma. Isso seria escrito como;

Dim Retangulo as Shape

Você não deve deixar o programa esperar até que o nome seja usado pela primeira vez para adivinhar que é uma forma e não o tamanho ou a cor do retângulo. Ao definir explicitamente o que a variável representa, o Editor VBA solicitará sugestões à medida que você escreve seu código.

Um Exemplo de Automação

Vamos armazenar o código no mesmo documento. Clique no pequeno sinal de adição à esquerda do texto “Projeto VBA”. Dessa forma as informações será expandida e irá revelar outra pasta “CorelDRAW [Versão do Programa que está usando] Object”. Expanda novamente para exibir uma pasta chamada “ThisDocument”, agora clique duas vezes em “ThisDocuemnt”. A janela de código mudará para uma janela vazia com apenas “Option Explicit” na parte superior.

Neste exemplo, deixaremos o CorelDRAW gravar o que fazemos para que possa ser repetido mais tarde. Para realizar esse processo, saia do editor VBA e volte para o CorelDRAW. Você pode alternar as janelas do CorelDRAW e do Editor VBA utilizando o atalho Alt + F11.

Gravando Macro

Você pode ativar a ferramenta de gravação de macro clicando no menu Ferramentas, indo até a opção Scripts e escolhendo a ferramenta Iniciar gravação, ou ativar uma caixa de ferramentas, clicando no menu Janela, indo até a opção Barra de Ferramentas e por fim selecionando a ferramenta Macros onde um agrupamento de botões estará disponível. Se você estiver em uma versão muito antiga do CorelDRAW é possível que tal recurso não esteja disponível. Por isso opte sempre por utilizar versões atuais do programa.

Ao clicar em iniciar gravação, uma caixa de diálogo aparecerá. Essa caixa de diálogo varia para cada versão do CorelDRAW. No entanto, deixe o nome padrão, geralmente é Macro1, marque a opção seguinte como Projeto VBA para salvar a macro neste documento. Quando confirmar as configurações na caixa de diálogo o CorelDRAW irá gravar as suas ações em seu projeto, exibindo essas informações em forma de código no VBA até que você desligue o Gravador de Macros.

Record Macro

Com o gravador de macros ativo, desenhe um retângulo na página. Agora preencha o retângulo com um preenchimento uniforme de cor verde CMYK onde C = 100, M = 0, Y = 100 e K = 0. Após aplicar essas propriedades ao retângulo pare a gravação da macro. Através do menu Ferramentas – Scripts – Parar gravação ou utilizando a janela de encaixe Macros, clicando na ferramenta Parar Gravação.

Agora pressione Alt + F11 para alternar da tela do CorelDRAW para o Editor VBA. Na janela Projeto à esquerda haverá várias entradas. Geralmente cerca de quatro com sinal de adição ao lado deles para indicar que podem ser expandidos.

Dê um duplo clique em Projeto VBA. Ele será expandido para mostrar algo como “CorelDRAWObjects” e “Modules”.

Clique duas vezes em Módulos para expandi-lo, onde haverá agora uma linha com o nome de “RecordedMacros”. Clique duas vezes em “RecordedMacros” e seu código gravado aparecerá na janela de código à esquerda da tela.

Project VBA

Seu código deve ser semelhante ao que está demonstrado abaixo, embora os números no código sejam diferentes, pois o tamanho e posição do retângulo não serão iguais aos utilizados neste exemplo.

Option Explicit

Sub Macro1()
‘ Recorded 10/11/2022
Dim s1 As Shape
Set s1 = ActiveLayer.CreateRectangle(0.208331, 11.498862, 3.64428, 8.703815)
s1.Rectangle.CornerType = cdrCornerTypeRound
s1.Rectangle.RelativeCornerScaling = True
s1.Fill.ApplyNoFill
s1.Outline.SetPropertiesEx 0.006665, OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100), ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#, Justification:=cdrOutlineJustificationMiddle
s1.Fill.UniformColor.CMYKAssign 100, 0, 100, 0
End Sub

O código a seguir é o mesmo, só está organizado para melhorar o entendimento do que esta escrito.

Option Explicit

Sub Macro1()
     ‘ Recorded 10/11/2022
     Dim s1 As Shape
     Set s1 = ActiveLayer.CreateRectangle(0.208331, 11.498862, 3.64428, 8.703815)
     s1.Rectangle.CornerType = cdrCornerTypeRound
     s1.Rectangle.RelativeCornerScaling = True
     s1.Fill.ApplyNoFill
     s1.Outline.SetPropertiesEx 0.006665,
          OutlineStyles(0),
          CreateCMYKColor(0, 0, 0, 100),
          ArrowHeads(0),
          ArrowHeads(0),
          cdrFalse,
          cdrFalse,
          cdrOutlineButtLineCaps,
          cdrOutlineMiterLineJoin,
          0#,
         100,
         MiterLimit:=5#,
         Justification:=cdrOutlineJustificationMiddle
    s1.Fill.UniformColor.CMYKAssign 100, 0, 100, 0
End Sub

A janela Projeto à esquerda exibe todas as macros do CorelDRAW instaladas em seu computador, além das que você escreveu ou gravou. Para este documento em particular, suas macros estão sendo armazenadas em Projeto VBA.

A pasta Projeto VBA é dividido em Objetos e Módulos. Existe apenas um objeto CorelDRAW e é “Este Documento”.

Este Documento

É onde é armazenado o código que apenas manipula e altera as páginas do CorelDRAW neste documento. Ele não pode conter código que irá manipular outros documentos do CorelDRAW ou outros arquivos, pastas, computadores ou aplicativos etc. Observe que cada documento do CorelDRAW aberto terá seu próprio “Este Documento”.

Módulos

Esta pasta pode conter quantos módulos você desejar. Os módulos contêm código que pode alterar qualquer documento, arquivo, pasta, computador ou aplicativo do CorelDRAW, etc. Para alterar um documento você deve se referir a qual objeto ou documento você se refere. No exemplo acima refere-se ao ActiveLayer. Como você tem um documento ativo do CorelDRAW aberto, ele deve ser sua camada ativa, mas a linha Set s1 = ActiveLayer.CreateRectangle.

Poderia ter sido escrito:

Set s1 = Documents(1).Pages(1).Layers(1).CreateRectangle(1.289362, 4.300362, 3.035772, 2.09526)

O nome padrão de uma macro gravada é RecordedMacros. Se você inserir um módulo em branco na janela do projeto, os nomes padrão dos módulos são Module1, Module2 etc. Os nomes dos módulos podem ser alterados na janela Propriedades para algo mais significativo. Selecione o módulo na Janela de Projeto e altere o nome na Janela de Propriedades ao lado de onde está escrito (Nome).

Sub Macro1()

É o início do código conhecido como sub rotina e tem o nome nessa instância de Macro1. O nome pode ser alterado para algo mais significativo e tem as mesmas regras de nomenclatura das variáveis. Todas as sub rotinas terminam com um colchete de abertura e fechamento.

Gravado em MM/DD/YY

Este é um comentário e está aí para esclarecimento. Um comentário começa com um apóstrofo ( ‘ ). Qualquer coisa na mesma linha após um apóstrofo é um comentário e não é um código.

Um comentário pode estar na mesma linha do código, mas deve estar após este código. Se você está mantendo o código, é uma boa ideia fornecer, muitos comentários em todo o código para lembra-lo em meses ou anos o que você está fazendo em cada estágio do código.

As linhas em branco não têm efeito no código, mas podem dividir o código em seções e, assim, facilitar o entendimento.

Indentando um código

Para manter uma boa prática de escrita de códigos é importante entender sobre indentar um código, ou seja, utilização de espaços e organização de hierarquia de cada trecho do código. Se você nunca ouviu falar disso aqui no site já tem um artigo sobre esse assunto. Só clicar aqui!!

Sinal de igual ( = )

Ao contrário da álgebra, um sinal de igual ( = ) tem um significado diferente na programação de computadores. Em álgebra, o sinal de igual significa que ambos os lados da equação são iguais. Na programação de computadores, o sinal de igual é um comando. O lado esquerdo é sempre apenas 1 variável e não uma fórmula matemática. O sinal de igual especifica que a variável do lado esquerdo representa o(s) objeto(s) ou valor(es) do lado direito.

Como resultado, o seguinte é aceitável em programação, mas não em álgebra.

X = X + 1

Se inicialmente a variável X fosse igual a 3, a linha de código acima aumentaria o valor de X para 4.

Set

Significa que o s1 vai representar algo, um objeto ou objetos, que possui múltiplas propriedades ou em outras palavras múltiplos valores. Não é apenas um retângulo, mas s1 representa valores para largura, altura, cor, posição, espessura da linha etc.

Se s1 fosse apenas a largura do retângulo, o uso da palavra Set não seria necessário, s1 é a forma de um objeto. Para maior clareza, é uma boa ideia renomear essa variável para algo mais significativo, como SHAPE1 ou SHAP ou shRECT ou shRect etc.

Documentos(1)

Significa o primeiro documento que você abriu

Páginas(1)

Significa a primeira página do documento

Layers(1)

Significa a primeira camada

End Sub()

É o fim da sub rotina Macro1. Uma nova sub rotina poderia seguir e começaria com Sub Nome_da_Macro() e também terminaria com End Sub.

Dentro dos colchetes que seguem a palavra CreateRectangle possui números que representam o tamanho e a posição do retângulo na página em polegadas. Para determinar qual é o número, use o mouse para selecionar o primeiro colchete e digite novamente o colchete. Em amarelo aparecerá um prompt explicando o que s números significam.

Nomenclatura de variáveis

Os nomes de variáveis não diferenciam maiúsculas de minúsculas, mas a capitalização é preservada. Eles devem começar com uma letra e não com um número e podem ter um total de até 255 caracteres.

Você não pode usar um espaço ( ), ponto final( . ) ou vírgula ( , ). Ponto de exclamação ( ! ), apóstrofo ( ‘ ) , ou caracteres @, &, $, # no nome, mas você pode usar o sublinhado ( _ ). O caractere sublinhado é útil para separar palavras em um nome de variável para facilitar a leitura da variável.

Tente evitar nomes de variáveis predefinidos pelo VBA, por exemplo, Dim SHAPE as SHAPE. É mais claro nomear o objeto por outro nome, por exemplo, SHAPE1, SH ou shRETANGLE etc.

Muitas pessoas em seus códigos escrevem os primeiros 3 primeiros caracteres em cada nome de uma variável para indicar o tipo de variável, por exemplo, intLENGTH como um inteiro. De uma olhada na tabela a seguir e conheça alguns prefixos.

Tipos de VariávelPrefixosIntervalos
Bytebyt0 a 255
Integerint-32,768 a 32,767
Longlng ou l-2,147,483,648 a 2,147,483,647
LongLongllng ou llDisponível apenas em aplicativos de 64 bitrs.-9,223,372,036.854,775,808 a 9,223,372,036,854,775,807
LongPtrllng or llO alcance varia dependendo da aplicação. Em uma aplicação de 32 bits é o mesmo que Long. Em um aplicativo de 64 bits é o mesmo que LongLong
Singlesng-3.402823E38 a -L40L1208E-45 para valores negativos1.401298E-45 a 3.402823E38 para valores positivos
Doubledlb-1.79769313486231E308 a -4.94065645841247E-324 para valores negativos4.94065645841247E-324 a 1.797693134862321E308 para valores positivos
Currencycur ou ccy-922,337,203,685,477,5808 a 922,337,203,685,477,5807
Stringstr0 a aproximadamente 2 bilhões de caracteres
VariantvarQualquer valor numérico até o intervalo de um Double ou para uma String de 2 bilhões de caracteres
Datedat ou dteMês Janeiro, Dia 1, Ano 100 a Mês Dezembro, Dia 31, Ano 9999
Booleanbln ou bVerdadeiro ou Falso
ObjectObj
Huperlinkhyp
Shapesh

A maioria das pessoas não se preocupa com Bytes, Singles, Currency e Decimal, Integer, Long & Double são os tipos numéricos mais usados.

Executando Macro

Agora vamos executar está macro. Utilize o atalho Alt + F11 para alternar entre as janelas e assim voltar ao documento do CorelDRAW.

Apague o retângulo, agora clique no menu Ferramentas – Scripts – Executar Macros. Selecione Macro1 e, em seguida, selecione executar. Veja que ao executar a macro um novo retângulo foi gerado no documento.

Volte para seu Editor VBA, acrescente algumas linhas em branco logo abaixo da macro copie e cole o código que está no exemplo abaixo.

Sub EXAMPLE()

    Dim SHAP As Shape

    Set SHAP = ActiveLayer.CreateRectangle(1, 4, 3, 2)

    SHAP.Outline.SetProperties (0.008), OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100)

    SHAP.Fill.UniformColor.CMYKAssign 0, 70, 90, 0

End Sub

Esta nova macro faz o que a primeira macro faz, mas é mais fácil de ler. Gravar uma macro fornece um código inicial a partir do qual você pode construir mais.

No exemplo acima todo o código foi recuado entre a abertura e o fechamento da macro. Isso facilita o entendimento.

As dimensões do retângulo foram simplificadas, mas você ainda pode especificar um local com 6 casas decimais, se desejar. Também contamos com as configurações padrões para pontas de seta etc, portanto, não especificamos tantas variáveis na linha SHAP.Outline.SetProperties (0,008), OutlinStyles(0), CreateCMYKColor(0, 0, 0, 100).

Podemos executar cada macro de forma independente. Quando você entrar em Ferramentas – Scripts – Macro – Executar Macro, você terá uma escolha de macros para executar.

Brinque com o código. Altere os valores CMYK para alterar as cores, altere o tamanho e a posição do retângulo.

Na macro EXAMPLE no final do código, antes da linha End Sub, em uma nova linha, adicione a palavra Macro1. Isso fará com que a macro EXAMPLE ramifique para Macro1 antes de terminar. A Macro1 será executada e, em seguida, o procedimento de código retornará para EXAMPLE para finalmente terminar. Ele irá criar dois retângulos. Para executar as duas macros juntas basta iniciar a macro EXAMPLE.

Seu código será semelhante a este

Option Explicit

Sub Macro1()
     ‘ Recorded 10/11/2022
     Dim s1 As Shape
     Set s1 = ActiveLayer.CreateRectangle(0.208331, 11.498862, 3.64428, 8.703815)
     s1.Rectangle.CornerType = cdrCornerTypeRound
     s1.Rectangle.RelativeCornerScaling = True
     s1.Fill.ApplyNoFill
     s1.Outline.SetPropertiesEx 0.006665, OutlineStyles(0), CreateCMYKColor(0, 0, 0,
         100),            
          ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps,
          cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#,
          Justification:=cdrOutlineJustificationMiddle
     s1.Fill.UniformColor.CMYKAssign 100, 0, 100, 0
End Sub

Sub EXAMPLE()

    Dim SHAP As Shape
    Set SHAP = ctiveLayer.CreateRectangle(1, 4, 3, 2)
    SHAP.Outline.SetProperties (0.008), OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100)
    SHAP.Fill.UniformColor.CMYKAssign 0, 70, 90, 0

    Macro1  ‘This automatically runs the macro Macro1.

End Sub

Cálculos envolvendo tipos de variáveis mistas

Tenha muito, mas muito, cuidado ao multiplicar, adicionar variáveis onde houver tipos de variáveis mistos e esperar a resposta em outro tipo de número.

A multiplicação de inteiros onde o resultado deve ser longo ainda é limitado pelo tamanho máximo de um inteiro, ou seja, 32.767. Multiplicar um número inteiro por um número longo criará um número longo.

É melhor converter números para outros tipos de números antes ou à medida que são calculados, ou seja, CLng(expressão) converterá uma variável numérica para longa.

Problemas de memória com o uso do Set

Toda vez que você usa Set como Set Object, a memória alocada não será liberada automaticamente quando o código for executado ou mesmo quando o aplicativo, como o CorelDRAW, for fechado. Ele será lançado quando o computador for reiniciado.

No código onde há loop e Set está dentro do loop, memória adicional será consumida toda vez que o Set for encontrado, mesmo que você esteja configurando a mesma variável para um objeto diferente ou igual. Se você fizer um loop muitas vezes, o código eventualmente falhará. Para evitar isso quando terminar com um objeto. Set object = Nothing dentro do mesmo loop.

Deve haver pelo menos o Set Object = Nothing quanto Set Object = …..

Veja como ficará o código com correções para perda de memória

Option Explicit

Sub Macro1()
     ‘ Recorded 10/11/2022
     Dim s1 As Shape
     Set s1 = ActiveLayer.CreateRectangle(0.208331, 11.498862, 3.64428, 8.703815)
     s1.Fill.ApplyNoFill
     s1.Outline.SetPropertiesEx 0.006665, OutlineStyles(0), CreateCMYKColor(0, 0, 0,
         100),            
          ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps,
          cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#, Justification:=cdrOutlineJustificationMiddle
     s1.Fill.UniformColor.CMYKAssign 100, 0, 100, 0
     Set s1 = Nothing
End Sub

Aqui está o mesmo código simplificado. O CorelDRAW mede distâncias em polegadas. Neste código foi removido as frações das dimensões.

Sub EXAMPLE()

    Dim SHAP As Shape
    Set SHAP = ActiveLayer.CreateRectangle(1, 4, 3, 2)
    SHAP.Outline.SetProperties (0.008), OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100)
    SHAP.Fill.UniformColor.CMYKAssign 0, 70, 90, 0
    Macro1  ‘This automatically runs the macro Macro1.
    Set SHAP = Nothing

End Sub

Abaixo está um código que irá criar 3 retângulos em várias posições de cores diferentes. Mostra um loop, o uso de Set dentro de um loop e o uso de uma variável, neste caso COUNTER para variar a posição e a cor.

Sub TEST()

    Dim shRECT As Shape
    Dim COUNTER As Integer
    Dim No_SHAPES As Integer
    COUNTER = 1
    While COUNTER <= 3
              Set shRECT = ThisDocument.ActivePage.ActiveLayer.CreateRectangle
                                      (1, COUNTER * 2,5, COUNTER * 2 – 1)
              shRECT.Fill.UniformColor.RGBAssign 0, 255 – COUNTER * 40, 0
              Set shRECT = Nothing
      COUNTER = COUNTER + 1
    Wend

End Sub

Existem situações em que você tem um Exit ou End dentro de uma instrução “Se”, seu código pode sair do procedimento sem encontrar um “Set = ……. Nothing”. Nesses casos, coloque um “Set = …… Nothing” adicional na instrução “Se”.

Funções

A função interna CreateRectangle no exemplo acima tem colchetes em torno dos argumentos. A ordem dos argumentos é naturalmente importante. Neste caso, eles são Esquerda, Superior, Direita e Inferior. Por exemplo:

Set SHAP = ActiveLayer.CreateRectangle(1,4,3,2)

Você não usa colchetes se uma função não for igual a uma variável, por exemplo, ActiveLayer.CreateRectangle 1,4,3,2

Digitar os colchetes durante a codificação é útil para obter as dicas do intellisense, mas eles removem os colchetes se a função não for igual a uma variável.

Se você deseja variar a ordem dos argumentos, você pode especificar especificamente os argumentos em qualquer ordem usando dois pontos igual “ := ”, por exemplo, ActiveLayer.CreateRectangle Direita:=3, Superior:=4, Inferior:=2, Esquerda:=1

As funções VBA incorporadas do CorelDRAW usam medidas imperiais, ou seja, polegadas. Para converter mm em polegadas, dívida por 25,4.

Você pode criar suas próprias funções. Estes retornam um valor.

Aqui está um exemplo simples de uma função criada pelo usuário. Coloque o seguinte código em um módulo e execute TEST.

Sub TEST()

    MsgBox ” A área de um retângulo de 30,5 mm x 80 mm em polegadas ² = ” &
                   dblInches(30.5) * dblInches(80), , “Example”

End Sub

Function dblInches(dblLength As Double) As Double

    dblInches = dblLength / 25.4

End Function

Quando você executa a macro TEST, ela cria uma caixa de mensagem. Quando o código encontra dbIlnches(30.5), o código desvia para a função de usuário dbIlnches(dbILength As Double) As Double.

A função requer um número do tipo double. Neste caso é 30,5 a função divide o número dado por 25,4 e iguala a resposta 1,18110236220474 à variável de função dbIlnches. O procedimento então retorna à macro TEST original, mas novamente retorna à função dbIlnches para converter 80 mm em polegadas. O resultado da multiplicação dos valores em polegadas é exibido em uma caixa de mensagem.

Msgbox - Caixa de Mensagem

É uma função interna do VBA Msgbox([Mensagem], [Estilo do Botão], [Título], [Arquivo de Ajuda], [Contexto]).

Os colchetes [ ] indicam  que entre é opcionalmente necessário. Se um arquivo de ajuda, um arquivo chm, especifico, um contexto também deverá ser especificado, como 0. Não se preocupe com um arquivo de Ajuda. É raramente usado e é muito avançado.

Na seção Mensagem Msgbox, que é a seção antes da primeira vírgula, o texto é indicado por aspas ( “ ” ). Há também um e comercial ( & ) para adicionar mais texto ou, neste caso, o valor de dbIlnches(30.5) * dbIlnches(80). O VBA é muito tolerante aqui, pois converte automaticamente sua resposta multiplicada em uma string (texto) sem que você use CStr para converter o double em uma string.

O estilo do botão não é especificado, pois há 2 vírgulas sem nada entre elas, portanto, ele usa o estilo padrão.

O estilo padrão por sua vez, é apenas 1 botão “OK”. Em seguida é o Título e é especificado como Atenção.

Função For Each

For Each é um pedaço de código que permite que você veja cada documento, página, camada ou forma aberta em uma coleção desses objetos.

Enquanto o For Next olha para cada objeto, ele pode obter informações sobre cada objeto, alterar o objeto, criar um objeto ou contar os objetos na coleção de objetos. Você também pode colocar comandos For Next dentro de outros comandos For Next.

Dessa forma, você pode pesquisar cada página e, em cada página, pesquisar cada camada e, em seguida, pesquisar cada forma em cada camada, em cada página. Esse aninhamento de comandos For Next pode ficar complicado.

Você pode dar uma olhada em um layout básico.

Dim obj [as Object_Type]    

    For Each obj In Objects

        ‘Aqui é onde você coloca algum código.

    Next [obj]

Não é necessário criar uma variável “Objetos” para representar a coleção de objetos que você vai percorrer. Em vez disso, se você for examinar cada página, poderá substituir Objetos por ThisDocument.Pages

De forma alternativa, se você estiver olhando para as formas na camada 1 na página 1, você pode usar.

ThisDocument.Pages(1).Layers(1).Shapes

Você deve declarar uma variável que representará cada objeto que você examinar. No código acima é mostrado como a variável obj. É opcional que você especifique que tipo de variável obj representa, pois o comando For Next sabe que será um componente da coleção de objetos que você especificar.

Por exemplo, na próxima linha o código sabe que “obj” é uma forma, pois é um grupo de formas que você está pesquisando para cada objeto.

ThisDocument.Pages(1).Layers(1).Shapes

Se você deseja percorrer todas as páginas de um documento, deve declarar uma variável como uma página por exemplo.

Dim pgSheet as Page

    For each pgSheet in ThisDocument.Pages

        ‘Algum código. Você pode adicionar uma página Não, Colorir a página ou
         adicionar ou modificar o texto etc..

    Next pgSheet

Da mesma forma para camadas em uma página

Dim lyObject as Layer

    For each lyObject in ThisDocument.Pages(1).Layers

        ‘ Algum código. Você pode examinar cada camada para ver se ela contém algum
         objeto, excluí-la etc..

    Next lyObject

De forma similar para formas em uma página

Dim shObject as Shape

    For each shObject in ThisDocument.Pages(1).Layers(“Layer 1”).Shapes

        ‘ Algum código. Você pode examinar cada forma para ver se é o tipo, tamanho ou
         localização e modificá-la ou dar-lhe um nome, etc.

    Next shObject

Não é necessário especificar o que é o Next, como Next pgSheet.Simply, somente Next é suficiente, mas você pode incorporar instruções For Each de forma que você possa ver cada camada e cada forma em cada página. Pode ficar confuso ler que Next significa a próxima pgSheet e não a próxima forma. É uma boa ideia especificar Next What. Página, Camada ou Forma etc.

For Each pode permitir que você percorra todos os documentos abertos do CorelDRAW. No entanto, o código deve estar em um módulo e não em ThisDocument.

Dim doc As Document

    For Each doc In Application.Documents

        ‘Algum código. Você pode examinar cada documento e obter o nome ou o caminho
        completo do arquivo, o número de páginas etc.

    Next doc

Observe que o último objeto na linha de código For Each representa vários objetos do tipo que você está percorrendo, por exemplo, na próxima linha, você está procurando por objetos de forma em um conjunto de formas. Para cada shObject em ThisDocument.Pages(1).Layers(“Layer1”).Shapes.

O seguinte não funciona porque você está procurando formas em um conjunto de páginas. Para cada shObject em ThisDocument.Pages, se você quiser ver cada página, use o seguinte. Para cada pgObject em ThisDocument.Pages.

O seguinte funcionará para examinar cada forma em um conjunto de formas. Para cada shObject em ThisDocument.ActivePage.ActiveLayers.Shapes

Você também pode declarar uma variável para representar um conjunto de formas.

Dim shObjects as Shapes

    Set shObjects = ThisDocument.ActivePage.ActiveLayers.Shapes

    Dim shObject as Shape

    For each shObject in shObjects

        ‘Some code.

    Next shObject

    ‘A próxima linha evita problemas de memória.

    Set shObjects = Nothing

Obrigado por ler este atigo espero ter ajudado, use os comentários para dar sua sugestão ou postar sua dúvida. Aproveita e se inscreve para receber noticias do site e acompanhar os novos posts.

Não perca essas dicas!

Não enviamos spam! Leia mais em nossa Política de privacidade

David L. Almeida

Desenvolvedor e Designer Gráfico, o site David Creator foi criado para compartilhar parte do conhecimento adquirido com o passar dos anos

Deixe um comentário