Skip Navigation Links



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
Suporte Técnico
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?
Nome : EO86aY5ucpC E-Mail : u7lf1u70@mail.com
Microsoft got rid Microsoft got rid of the easy way of doing this and made it hard, and for what end? to advertise MSN? Not all puciblity is good puciblity Microsoft! Thanks for the video, though. Super informative. I will have to set-up my parents spreadsheets like this because remaking them would be way too time consuming. Maybe after? I show my Dad the process he will begin switching.For me, Google Spreadsheets:=GoogleFinance( GOOG ; price ) Was this answer helpful?
Nome : 5XnbYYVnugj E-Mail : w41b73tz7@outlook.com
We got a new camera (two, atlaulcy) in March, and our first real-ish camera, a Canon T2i. I'm usually the one with gadget lust, but now that we've got that one, Lee wants a zoom lens and a macro lens and, and, and Nice pictures I should learn to use the big camera rather than the small one I still use.
Nome : DMuBBxpt E-Mail : ccwscesmbmi@outlook.com
EBITDA can be a perfectly legitimate accounting practice for companies that have long term debt and expect to write down that debt over a long period of titeeInvestm.nms like a theme park are speculative investments for the future and no park is expected to go profitable in one two or even five years.Please leave the financial opinions and speculation to the experts, and focus on the news.

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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