Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de Usuários
»Células Acadêmicas«
intcontpiada : 118
Pico de luz
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
Faça um pequeno teste com 10 questões de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programação com nosso treinamento on-line de lógica de programação
.:.
Veja nosso calendário de treinamentos
Gostou da Página?
Então

para um amigo!

Pesquisa personalizada
Pesquisar Dicas:

 






Criando uma linguagem de macro para sua própria aplicação

Um dos grandes diferenciais de um pacote de aplicativos como o Office está no fato dele possuir sua própria linguagem de programação. Utilizando esta linguagem pode-se automatizar/personalizar determinadas tarefas de forma a que o Office se encaixe perfeitamente na rotina de cada empresa.

E se você desejasse criar uma linguagem de programação para sua própria aplicação, como deveria fazer ?

O Visual Basic disponibiliza um componente chamado Script Control, que pode ser incluido na aplicação através de Project->Components->Microsoft Script Control 1.0

Este componente executa instruções em VBScript que sejam transmitidas para ele. Desta forma podemos criar uma linguagem de macros para a aplicação.

Para a criação da linguagem de macros precisamos seguir algumas regras :

1) Para que a linguagem de macros possa ter acesso às funções e informações normais da aplicação é importante que todo o núcleo de código da aplicação esteja criado em um modelo de classes. Assim sendo a interface da aplicação não deverá realizar as tarefas chaves da aplicação mas sim chamar as classes. As mesmas classes poderão ser chamadas de dentro da linguagem de macros.

2) O VBSCript não possui tipagem de variáveis. Por isso todas as classes do modelo de objetos que forem chamadas pelo VBScript precisam ter os parâmetros de subs e funções definidos como ByVal. Caso seja necessário um parâmetro ByRef este precisará ser Variant. Lembre-se sempre que o default do VB é ByRef.

3) Se for necessário que a linguagem de macros acesse algum form na interface este deverá ser carregado (Load) antes da execução da macro. Deve-se tomar cuidado com as questões de carregamento/descarregamento e destruição de forms.

Vamos demonstrar a criação de uma linguagem de macros com uma aplicação/exemplo.

Nossa aplicação será uma aplicação MDI. Terá 2 forms, além do MDI : frmCalculo, que realiza uma soma de 2 números e frmMacro, utilizado para a construção de macros.

A aplicação possui ainda uma classe CL_CALCULAR com um método somar. O form frmCalculo não realiza a soma, utiliza a classe CL_CALCULAR para realizar a mesma.

Veja o código do método Somar da classe CL_CALCULAR :

Public Function Somar(ByVal a As Integer, ByVal b As Integer) As Integer

Somar = a + b
End Function

Observe o ByVal necessário na especificação dos parâmetros dos métodos, como explicado anteriormente.

No formulário frmMacro colocaremos uma textbox (txtMacro) com MultiLine=true para que o usuário possa realizar a digitação da macro. Neste form acrescentaremos também o Script Control, que chamaremos de SC, e um botão cmdExecutar, responsável pela execução da macro.

Agora chegamos ao ponto principal : a execução da macro. Para que a macro possa acessar a classe e o formulário de calculo precisaremos adiciona-los no objeto SC. Para adicionarmos o form teremos que carrega-lo, enquanto que no caso da classe ela precisará ser instanciada.

Ao adicionar os objetos podemos definir o nome com o qual serão conhecidos dentro da linguagem de macro, que pode ser qualquer coisa, não precisa ser igual ao nome interno da aplicação. 

Feito isso basta adicionarmos o código e executar. A execução é feita com base em Subs. Executa-se uma sub contida na macro. Desta forma a macro deverá possuir uma Sub que será chamada pela aplicação. Podemos definir a Sub principal como sendo Sub Main.

Veja como fica o código :

Private Sub cmdExecutar_Click()
On Error GoTo Trataerro
Dim obj As CL_CALCULAR

'Cria/carrega os objetos para o ambiente de macro
Set obj = New CL_CALCULAR
Load frmCalculo

'Adiciona os objetos no ambiente de macro
SC.AddObject "Calcular", obj, True
SC.AddObject "TelaCalculo", frmCalculo, True

'Adiciona o código e executa
SC.AddCode txtMacro.Text
SC.Run "Main"

'Desfaz o ambiente de macro
Set obj = Nothing
Unload frmCalculo
Set frmCalculo = Nothing

'Desfaz os vínculos no objeto SC
SC.Reset
Exit Sub

Trataerro:
'Tratamento de erros no script
MsgBox "Erro no Script"
End Sub

Veja alguns exemplos de macro que podem ser criadas em tempo de execução :

Exemplo 1 :

Sub Main()
TelaCalculo.Show 1
End sub

Exemplo 2 :

Sub Main()
x=inputbox("Digite o 1o número")
y=inputbox("Digite o 2o número")
msgbox Calcular.somar(x,y)
End Sub

Observe que apesar da aplicação ser MDI, o frmCalculo, utilizado pela macro, não é MDI Child, o que permite que a macro chame-o de forma modal.

Essa aplicação é apenas um exemplo da criação de macros, mostrando desta forma o tópico principal : A execução da macro. Para implementar isso em sua aplicação o ideal é criar um banco de dados para armazenar macros e uma tela de listagem das macros neste banco, a partir da qual seja possível executar as macros ou edita-las. Pode-se também criar um sistema de agendamento e/ou um sistema de eventos para a execução das macros.

Baixe o código fonte referente a este artigo.

Dennes Torres
MCSD,MCSE,MCDBA





Envie seus comentários sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentários nesta página

Veja abaixo os comentários já enviados :

Nome : G.W.Bush E-Mail : gwbush@altec.gov
Este site é uma porcaria, e a minha avó diz que já houve coisas melhores do que estas, porque agora é o sinal da crise do pais. Toda a minha concorda que este site e seus artigos são uma porcaria.

Assinado,
Bush
Nome : Dennes Torres E-Mail : dennes@bufaloinfo.com.br

Caro Bush,

Seria interessante aprender a escrever antes de expressar suas opiniões. É compreensível que alguém que não consegue escrever um pequeno comentário corretamente ache esse site uma porcaria, já que não conseguirá compreender nada do que se encontra publicado aqui.

Desejo a você sinceramente que evolua e aprenda a escrever.
Nome : Milton Sampaio E-Mail : milsamp@zipmail.com.br
está quase no ponto em eu quero fazer minha pesquisa para um futuro tcc, que é sobre script usando a linguagem vbscript e as macros. Valeu!
Nome : priscilla E-Mail : prideise@hotmail.com
eu quero saber quanto e um cd para eu poder dar aulas de computação para a minha aluna por favor alguem ou alguns de vcs que trabalha com isso pode me explicar por favor e por que eu nao tenho esse cd e ninguem da qui da minha rua tem ok o meu nome e priscilla qualquer coisa pode me ligar vou deixar com vcs o numero do meu celular priscilla tel:8146-3637 ok muito obrigada tenha uma boa noite por favor eu pesso que vcs nao deixe de mi ligar beijos priscilla ok|!!!!!!!!!!!
Nome : Faria Vieira D Jose E-Mail : daddombele@yahoo.com
achei optimo assim que eu executar entrarei em contacto convosco, o que eu preciso é de programar uma workseet, com objectivos de calcular a média Fina de um aluno e no final, mostrar se o aluno reprovou ou aprovou e quais as cadeiras em que ele não teve rendimento.
Nome : samoel marques E-Mail : samoelmarques@hotmail.com
Olha, não achei que fosse encontrar algo desta natureza que pudesse me ajudar. Muinto bom, não é bem isso que desejo fazer, mas é o princípio, já que a minha nescessidade é executar funções passadas em tempo de execução. Agora já posso criar algo que fassa este trabalho.

Valeu!
Nome : Paleo E-Mail :
Salve Dennes,

tudo bem? Dennes tu é o cara mesmo. Me conta uma coisa, já fizestes algo parecido no VS 2005?

P.S.: O download do código está dando erro.
Nome : Pablo E-Mail : pablo.rg@ig.com.br
achei o código ótimo....
Nome : Raimundo Carlos M. Vieira E-Mail : rcmv@vivax.com.br
Sou iniciante em macros....não consigo levar meu valor digitado na caixa inputBox para uma célula qualquer de minha planilha...porquê? como faço?

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Conheça mais sobre o nosso site :

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Quer saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e
Prepare-se para o Mercado!
Veja o que a Búfalo tem para você.

© Búfalo Informática, Treinamento e Consultoria - Rua Álvaro Alvim, 37 Sala 920 - Cinelândia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br