Você está na página 1de 69

INTRODUO

Tutorial passo a passo de como criar a planilha e o banco de dados corretamente para um bom funcionamento de projetos feitos em Visual Basic no Excel. Assim como tambm a criao do Userform e os objetos rtulos, caixa de texto e boto de comando... (Em breve postarei a parte 2 com os cdigos necessrios para o cadastro)

CRIANDO A PLANILHA...
Vamos criar a nossa planilha e salvar ela como"PASTA DE TRABALHO HABILITADA PARA MACROS" o nome dessa a eu coloquei "cadastro", mas posteriormente faam como a necessidade pedir...

Agora vamos alterar o nome da nossa "folha", "aba" ou "planilha" sei l kkkk, eu coloquei cadastro tambm... j que a ideia cadastrar...

Criando o Banco de Dados...


Vamos usar 4 campos para esse projeto que so; NUMERO CAMPO_1 CAMPO_2 CAMPO_3 Quanto menos formatao voc usar melhor( tipo cor por exemplo)

Abaixo os campos formatados com grade e o tamanho das colunas alterados...(essa formatao est tima tente ser o mais simples possvel)

CRIANDO O FORMULRIO
PASSO A PASSO... Clicamos na guia desenvolvedor...

Dentro do circulo preto est o boto Visual Basic atravs dele que vamos iniciar a criao do nosso UserForm....

No circulo vermelho tem uma legenda sobre esse boto,assim como indica o atalho para chamar o boto sendo ele (Alt+F11) Ento clicando no boto ou atravs do atalho vamos abrir o Editor VBA... Segue a tela do Editor VBA, a marcao em vermelho mostra o Object Explorer, sendo que onde aparecem os projetos VBAs abertos no momento... no nosso caso o VBAProject (cadastro.xlsm) J a marcao em preto nos mostra os objetos presentes nesse VBAProject. "Projeto VBA" Que no caso so apenas as "ABAS" da pasta de trabalho.... por que ainda no foram inseridos nenhum outro.

Boto Inserir UserForm

Clicando nesse boto a seguinte tela ser aberta...

ALTERANDO AS PROPRIEDADES NAME E CAPTION DO FORMULARIO

Vejam que por padro essas propriedades vem assim NAME = UserForm1 e CAPTION a mesma coisa, vamos altera-las de acordo com a necessidade do nosso projeto....

NAME:
Eu alterei a propriedade NAME do meu UserForm para "TESTE" a mesma serve para facilitar o cdigo na hora de programar pois assim fica mais fcil se voc tiver usando vrios formulrios de voc identificar cada um deles dentro do cdigo que estiver escrevendo...

ALTERANDO O CAPTION
Notem que diferente do "NAME" o "CAPTION" serve para alterar o texto que exibido, facilitando assim o entendimento e interao do usurio com o sistema criado... Alterei essa propriedade para "APRENDENDO VBA" (veja que ela est aparecendo no canto superior esquerdo do formulrio)

OBJETO RTULO OU LABEL

Os rtulos so os objetos que servem como legenda para os outros objetos caixas de texto, ou para colocar qualquer texto na tela do formulrio....

Vamos criar 4 rtulos que sero os ttulos iguais aos campos que criamos no nosso Banco de dados em nossa planilha cadastro.

A esquerda temos o primeiro rtulo inserido, a propriedade caption do mesmo vem sempre assim "Label1",2,3,4,5 depende da quantidade de label que j foram iseridas no UserForm...

ALTERAR PROPRIEDADE DO RTULO

Vejam que alterando o caption dos objetos o texto que exibido por eles alterado tambm, no caso foi alterado de label1 para "NUMERO" j que o titulo no nosso primeiro campo na nossa planilha cadastro...

INSERINDO CAIXA DE TEXTO OU TEXTBOX

O boto para inserir as caixas de texto esse marcado na imagem a esquerda... Aps clicarmos sobre ele damos um clique no formulrio para que o mesmo seja inserido dentro do Userform.

ALTERANDO PROPRIEDADE DA CAIXA DE TEXTO


Geralmente eu s altero mesmo a propriedade "NAME" das caixas de texto pois ela quem vai identificar quem quem na hora de escrever os cdigos, mas tem muitas outras propriedades legais que podemos alterar at mesmo para melhorar o visual do nosso projeto....

Geralmente eu coloco TXT_ e em seguida o nome que cada caixa de texto representar no projeto nesse caso eu coloquei "TXT_NUMERO" assim facilita muito na hora de programar no VBA.

Pronto agora vamos criar mais 3 rtulos acompanhados de 3 caixas de texto... para completar os nossos campos do Userform...

Altere a propriedade caption conforme imagem a esquerda, notem o texto exibido antes como label2 e agora como "CAMPO_1"

faremos o mesmo para o campo 2

e tambm para o campo 3

Para as caixas de texto vamos alterar a propriedade NAME de todas elas... Iremos alterar ento para "TXT_CAMPO1"

A terceira caixa de texto alteraremos para "TXT_CAMPO2"

E a terceira caixa de texto para "TXT_CAMPO3"

AJUSTANDO OS OBJETOS
A explicao serve para todos os objetos inseridos anteriormente...

Ficou assim depois de ajustados todos os objetos...

INSERINDO BOTO DE COMANDO

Os botes de comando geralmente so usados para que ao receber um clique do usurio, ele execute o cdigo escrito em seu corpo de cdigos... Representado pela marcao em vermelho na imagem a esquerda.

Vamos inserir apenas 1 por enquanto.

PROPRIEDADES A SEREM ALTERADAS NO BOTO


CAPTION...

NAME: Serve para localizao e identificao do objeto quando formos programar...

ACCELERATOR:

FORMULRIO PRONTO. Bom o formulrio para o nosso projeto de teste esse, rode ele para voc ver como ficar quando estiver funcionando... s apertar F5, veja no que d kkkkkk

ADASTRO EM EXCEL COM VBA PARTE 3

CDIGO PARA CADASTROS


Bom o cdigo que citarei a diante poder usar em todos os sistemas desenvolvidos em VBA, pois padro e muito fcil, depois que pegamos o jeito da coisa moleza... Vamos ento relembrar j postei a parte 1 (que inicia o projeto, criando a planilha o formulrio e os objetos tudo passo a passo) e a parte 2 ( onde ensino a criar um numero automtico para servir de cdigo para os itens gravados na planilha) ... Ambas se encontram em meu blog... Caso no tenha lido essencial que leia pois se no ficar perdido com as informaes contidas nesse post j que essa a parte 3.

Dando continuidade...
Vamos abrir o modulo_geral e iniciar o cdigo...

o cdigo que far o cadastro o seguinte : Function CADASTRO() If TESTE.TXT_CAMPO1.Text = "" Then'se o campo 1 for igual a vazio faa MsgBox "CAMPO_1 OBRIGATRIO", vbExclamation 'caixa de mensagem TESTE.TXT_CAMPO1.SetFocus 'leva o ponteiro do mouse de novo para o campo se ele estivar vazio Exit Function 'sai da funo se o campo for vazio Else ' se nao for vazio prosseguir End If If TESTE.TXT_CAMPO2.Text = "" Then'se o campo 2 for igual a vazio faa MsgBox "CAMPO_2 OBRIGATRIO", vbExclamation 'caixa de mensagem TESTE.TXT_CAMPO2.SetFocus 'leva o ponteiro do mouse de novo para o campo se ele estivar vazio Exit Function 'sai da funo se o campo for vazio Else ' se nao for vazio prosseguir

End If If TESTE.TXT_CAMPO3.Text = "" Then'se o campo 3 for igual a vazio faa MsgBox "CAMPO_3 OBRIGATRIO", vbExclamation 'caixa de mensagem TESTE.TXT_CAMPO3.SetFocus 'leva o ponteiro do mouse de novo para o campo se ele estivar vazio Exit Function 'sai da funo se o campo for vazio Else ' se nao for vazio prosseguir End If

Dim BANCO As Database Dim TABELA As Recordset Set BANCO = OpenDatabase(ThisWorkbook.Path & "/" & ThisWorkbook.Name, False, False, "EXCEL 8.0") Sql = "insert into [CADASTRO$] (CODIGO,CAMPO_1,CAMPO_2,CAMPO_3)VALUES ('" & TESTE.TXT_NUMERO & "','" & TESTE.TXT_CAMPO1 & "','" & TESTE.TXT_CAMPO2 & "','" & TESTE.TXT_CAMPO3 & "')"

BANCO.Execute Sql ' executa o cdigo sql acima que o cdigo do cadastro BANCO.Close 'fecha o banco de dados modulo_geral.NUM_AUTO 'chamar a funo NUM_AUTO para que ao cadastrar o numero mude para o prximo. TESTE.TXT_CAMPO1.Text = "" 'limpa o CAMPO 1 TESTE.TXT_CAMPO2.Text = "" 'limpa o CAMPO 2 TESTE.TXT_CAMPO3.Text = "" 'limpa o CAMPO 3 TESTE.TXT_CAMPO1.SetFocus ' leva o ponteiro do mouse para o campo 1 de novo

End Function

CADASTRO aqui vai o nome da planilha que temos em nosso banco de dados, para o cdigo saber onde sero gravadas as informaes...

CODIGO,CAMPO_1,CAMPO_2,CAMPO_3 aqui vai o nome de cada

titulo de coluna dentro do nosso banco de dados..

('" & TESTE.TXT_NUMERO & "','" & TESTE.TXT_CAMPO1 & "','" & TESTE.TXT_CAMPO2 & "','" & TESTE.TXT_CAMPO3 & "')" aqui vo os nomes dos objetos sempre vem o nome do formulrio e "." ponto e depois o nome do objeto entre os sinais descritos no cdigo acima '" & aqui dentro vai o formulrio e o objeto & "'...

pois o cdigo esse para voc usar em seus projetos s substituir os textos das marcaes para os seu objetos, planilha, formulrio etc...

CHAMANDO O CDIGO CRIADO


DENTRO DO BOTO DE COMANDO GRAVAR

Vamos dar um clique duplo no boto para

abrir o editor de cdigos do mesmo... que se abrir assim: vamos escrever o seguinte cdigo: modulo_geral.cadastro

vamos rodar o nosso projeto e ver o que acontece:

Se clicarmos no boto do jeito que est ser exibido a seguinte mensagem:

que exibida devido ao cdigo : If TESTE.TXT_CAMPO1.Text = "" Then MsgBox "CAMPO_1 OBRIGATRIO", vbExclamation TESTE.TXT_CAMPO1.SetFocus Exit Function Else End If

Agora vamos por alguma informao no campo 1 e vamos clicar de novo no boto GRAVAR

que exibida devido ao cdigo : If TESTE.TXT_CAMPO1.Text = "" Then MsgBox "CAMPO_1 OBRIGATRIO", vbExclamation TESTE.TXT_CAMPO1.SetFocus Exit Function Else End If

E POR A VAI AT QUE TODAS AS INFORMAES ESTEJAM PREENCHIDAS, S ASSIM ELE EFETUAR O CADASTRO

Veja um cadastro efetuado...

VEJA QUE O NUMERO 2 J FOI GERADO OS CAMPOS J FORAM LIMPOS E O PONTEIRO DO MOUSE FOI PARA O CAMPO 1

EFETUEI UNS CADASTROS PARA SERVIR DE EXEMPLO...

CDIGOS VBA MODELOS...


FUNO PARA CADASTROS.

Boa tarde! galera no post anterior da srie CDIGOS VBA MODELOS... ensinei a criar um numero crescente para ser usado como cdigo de registro, para o cadastro que irei ensinar nesse post... espero que estejam gostando do meu blog...

Post anterir: CDIGOS VBA MODELOS... FUNO NUM_AUTO...


http://excelamador.blogspot.com.br.passo_a_passo_numero_automatico

Vamos abrir a pasta que criamos no post anterior para dar continuidade a mesma...

Agora iremos criar um segundo campo para o nosso banco de dados...

que ser onde vamos cadastrar produtos diversos...Assim o nosso titulo ser PRODUTO...

Agora vamos no Editor VBA a caixa de texto criada no post anterior (que exibido o nmero auto...) temos que alterar a propriedade ENABLE dela para False.

Depois vamos criar outro Objeto caixa de texto para servir de referencia a esse campo novo (PRODUTO) criado na planilha...

Vamos inserir 2 Label (rtulos)para servir de ttulos para as caixas de texto criado...

Alterar a propriedade CAPTION de cada rtulo conforme imagem..

Inserir um boto de comando e alterar a propriedade CAPTION para GRAVAR:

Cdigo modelo para cadastro...


Function CADASTRO()

If FORMULARIO.OBJETO.Text = "" Then MsgBox " OBJETO UM CAMPO OBRIGATRIO", vbExclamation FORMULARIO.OBJETO.SetFocus Exit Function Else End If Dim linha As Integer Dim BANCO As Database Dim TABELA As Recordset Set BANCO = OpenDatabase(ThisWorkbook.Path & "/" & ThisWorkbook.Name, False, False, "EXCEL 8.0") Sql = "insert into [PLANILHA$] (CAMPO)VALUES ('" & FORMULARIO.OBJETO & "')" BANCO.Execute Sql BANCO.Close MODULO.NUM_AUTO FORMULARIO.OBJETO.Text = "" FORMULARIO.OBJETO.SetFocus End Function ______________________________________________________ CADASTRO = NOME DA FUNO OBJETO= NOME DO OBJETO PLANILHA= NOME DA PLANILHA CAMPO= CAMPO DENTRO DA PLANILHA ONDE SERO GRAVADAS AS INFORMAES FORMULARIO= NOME DO FORMULRIO ONDE SE ENCONTRA O OBJETO MODULO= MDULO ONDE EST O CDIGO QUE GERA O NMERO AUTOMTICO... NUM_AUTO= NOME DA FUNO QUE GERA O CDIGO AUTO. DENTRO DO MODULO ...

________________________________________________________________________________

COLOCANDO EM MINHA PASTA DE TRABALHO O CDIGO ACIMA... Pois bem vou ir copiando parte por parte e explicar... Function CADASTRO ) 'aqui vai o nome da funo que pode ser qualquer um... Verifica se o OBJETO no est vazio If FORMULARIO.OBJETO.Text = "" Then MsgBox " OBJETO UM CAMPO OBRIGATRIO", vbExclamation FORMULARIO.OBJETO.SetFocus Exit Function Else End If

Colocando os meus objetos, o cdigo acima ficar assim:

If UserForm1.TextBox2.Text = "" Then MsgBox " PRODUTO UM CAMPO OBRIGATRIO", vbExclamation UserForm1.TextBox2.SetFocus Exit Function Else End If

Ao executa-lo se o Textbox1 estiver vazio exibir a seguinte mensagem...

UserForm1 = nome do nosso formulrio

TextBox2= nome do nosso objeto no formulrio...

PRODUTO = nome do campo na planilha...

esse mesmo cdigo repetido quantas vezes for necessrias de acordo com o nmero de caixas de texto que estivermos usando em nosso projeto de modo que no seja efetuado o cadastrado se alguma caixa de texto estiver vazia e do mesmo modo avisando ao usurio qual , por meio da mensagem exibida...
________________________________________________________________________________

Sql = "insert into [PLANILHA$] (CAMPO)VALUES ('" & FORMULARIO.OBJETO& "')"

A linha acima responsvel pelo cadastro nela voc tem que informar em qual planilha ser feito o cadastro???? que no nosso exemplo ser... TESTE_NUMERO ento a linha ficar assim Sql = "insert into [TESTE_NUMERO$] (CAMPO)VALUES ('" & FORMULARIO.OBJETO& "')"

CAMPO aqui

devemos dizer em quais campos sero gravadas as informaes, vamos gravar ento nos campos NUMERO e PRODUTO de nossa planilha... ento a linha ficar assim agora... Sql = "insert into [TESTE_NUMERO$] (NUMERO,PRODUTO)VALUES ('" & FORMULARIO.OBJETO& "')" Veja que para separar um campo do outro basta por a virgula entre eles. ______________________________________________________

FORMULARIO aqui

devemos informar qual UserForm est o Objeto que ter a informao... no caso o UserForm1...

ento a linha ficar assim agora... Sql = "insert into [TESTE_NUMERO$] (NUMERO,PRODUTO)VALUES ('" & UserForm1.OBJETO& "')" ______________________________________________________

OBJETO aqui

informamos ao cdigo onde est a informao que vai ser gravada... que no nosso caso como o primeiro campo do cdigo NUMERO ento o primeiro objeto ser o TextBox1... ento a linha ficar assim agora... Sql = "insert into [TESTE_NUMERO$] (NUMERO,PRODUTO)VALUES ('" & UserForm1.TextBox1 & "')"

e por fim vamos por o objeto que ir por as informaes no campo PRODUTO que ser o TextBox2...

ento a linha ficar assim agora... Sql = "insert into [TESTE_NUMERO$] (NUMERO,PRODUTO)VALUES ('" & UserForm1.TextBox1 & "','" & UserForm1.TextBox2 & "')" ______________________________________________________ MODULO.NUM_AUTO (aqui devemos chamar a funo cdigo automtico criado no post mencionado no inicio deste) FORMULARIO.OBJETO.Text = "" (esse cdigo serve para limpar a caixa de texto) FORMULARIO.OBJETO.SetFocus (esse cdigo serve para levar o ponteiro do mouse novamente para o objeto citado nele) ______________________________________________________ Veja como ficar o cdigo completo para gravar esses 2 objetos na planilha...

Function CADASTRO() If UserForm1.Textbox2.Text = "" Then MsgBox " PRODUTO UM CAMPO OBRIGATRIO", vbExclamation UserForm1.Textbox2.SetFocus Exit Function Else End If Dim linha As Integer Dim BANCO As Database Dim TABELA As Recordset

Set BANCO = OpenDatabase(ThisWorkbook.Path & "/" & ThisWorkbook.Name, False, False, "EXCEL 8.0") Sql = "insert into [TESTE_NUMERO$] (NUMERO,PRODUTO)VALUES ('" & UserForm1.TextBox1 & "','" & UserForm1.TextBox2 & "')" BANCO.Execute Sql BANCO.Close

Mdulo1.NUMERO

UserForm1.Textbox2.Text = "" UserForm1.Textbox2.SetFocus End Function

______________________________________________________ Vamos copiar e colar o cdigo dentro do mdulo1 logo abaixo da funo NUMERO...

_________________________________________________________________________________

Vamos chamar essa funo dentro do boto no evento Click...

_____________________________________________________ Pronto agora s rodar o formulrio e testar... Estando tudo certo salvem o trabalho que irei acrescentar uma terceira

coluna ao cadastro a de Valor dos Produtos... No percam o prximo post ser voltado para colocar a coluna valor, assim voc conseguir cadastrar quantas informaes voc precisar... e tambm darei inicio ao assunto pesquisa... onde ao cadastrar um determinado produto o mesmo j aparea em uma lista dentro do prprio formulrio...

PARTE 2 CADASTRO COM EXCEL VBA...CDIGOS


Para quem no viu o post anterior que ensina a criar o banco de dados de maneira correta e o userform assim como alguns objetos tipo, label, textbox, comandbutton,pode estar acessando o link abaixo ou procurando no blog por Passo a passo cadastro com Excel VBA Link do post Passo a passo cadastro com excel vba parte 1 http://excelamador.blogspot.com.br/2013/03/passo-passo-cadastro-com-excel-vba.html

Bom dando continuidade vamos comear mostrando o resultado final do post anterior que o formulrio j pronto...

Inicialmente vamos abrir a pasta de trabalho que criamos com o nome "cadastro" para darmos continuidade no mesmo...

Abrir tambm o Editor VBA...

para isso clique na guia desenvolvedor...

em seguida no boto Visual Basic...

dever se abrir uma tela parecida com essa :

CDIGO PARA O CAMPO NUMERO

Vamos criar um cdigo que automaticamente gere um numero aps o outro em ordem crescente, assim cadastramos o numero 1 e geramos o numero 2 e assim por diante...

O primeiro passo habilitar a referencia necessria para o funcionamento do projeto :

Clicamos na guia Ferramentas :

Em seguida em Referencias :

Na janela que se abre devemos procurar e marcar a caixa de seleo referente a seguinte referencia:

Microsoft DAO 3.6 Object Library

ou pode ser a verso 3.51 tambm caso o seu Excel no tenha a 3.6

encontrada e marcada clicamos no boto OK da janela...

INSERINDO MDULO
Vamos inserir um mdulo para facilitar, por que escrevemos o cdigo uma unica vez dentro do mdulo e quando precisarmos executar o mesmo s chama-lo de onde estivermos dentro do projeto...

clicando na seta que se encontra ao lado do boto Inserir UserForm, se abri um novo menu...

devemos escolher Mdulo e um novo mdulo ser inserido com o nome padro de Mdulo 1...

Vejam o mdulo j inserido...

Vamos alterar o nome desse mdulo para "modulo_geral"

Clicamos no Mdulo 1 e precionamos F4 para abrir a janela de propriedades que segue:

mdulo ainda sem alterar a propriedade

mdulo com a prop. alterada

CDIGO
A rea branca a direita dessa janela onde vamos escrever nossos cdigos. O cdigo para gerao desses nmeros sequenciais o seguinte :

(vale lembrar que s vai funcionar se habilitar a referencia mencionada anteriormente nesse post)

Ento vamos copiar e colar o seguinte texto na rea em branco do modulo_geral..

Function NUM_AUTO() Dim BANCO As Database Dim TABELA As Recordset Set BANCO = OpenDatabase(ThisWorkbook.Path & "/" & ThisWorkbook.Name, False, False, "EXCEL 8.0") Set TABELA = BANCO.OpenRecordset("CADASTRO$") If TABELA.EOF And TABELA.BOF Then TESTE.TXT_NUMERO = 1 Else TABELA.MoveLast TESTE.TXT_NUMERO = Format(TABELA("CODIGO") + 1) End If End Function

Ento toda vez que formos fazer um cdigo para gerar nmeros automticos ser a mesma coisa, porm vamos mudar apenas as referencias exemplo:

NUM_AUTO o nome da funo que pode ser qualquer um (mas que seja de fcil identificao)

CADASTRO o nome da planilha (imagem ao lado) que deve ser escrito em maisculo e entre (" $")

TESTE o nome do UserForm que receber o cdigo

TXT_NUMERO o nome do objeto caixa de texto que receber o numero automtico.

CODIGO o nome do campo dentro da planilha

onde ser inserido a informao quando for cadastrar a mesma...

CHAMANDO A FUNO NUM_AUTO


Para que esse cdigo tenha efeito necessrio executar ele dentro do UserForm no evento Initialize

s dar um clique duplo

no userform TESTE mas tem que ser em uma rea vazia...

para abrir o editor

de cdigo do formulrio que se abrir assim...

devemos trocar a palavra Click por Initialize.

ficar assim :

Pronto aqui dentro vamos chamar a funo que criamos

digitando o seguinte comando modulo_geral.NUM_AUTO

PRONTO... Vamos agora alterar a propriedade ENABLE da caixa de texto NUMERO para FALSE.

assim bloqueamos a caixa de texto para que o usurio no altere seu valor, afinal o numero ser automtico.

isso a agora vamos executar o nosso formulrio para ver se esta tudo ok, se estiver o valor da caixa de texto NUMERO dever ser igual a 1...

assim:

ok... espero que tenham gostado e at a parte 3, postarei o cdigo que far o cadastro das informaes degitadas nas caixas de texto em nosso banco de dados...

Postado h 15th March 2013 por Edivan Cabral da Silva 4

Visualizar comentrios
1. Carla Rebouas10 de maio de 2013 06:38

Edivan, Adorei seu post. Porm ao inserir o cdigo e fazer do modo que falou est dando um erro "Erro em Tempo de execuo:3265: item no encontrado nesta coleo." O que fao para resolver?? Obrigada
Responder

2. Edivan Cabral da Silva10 de maio de 2013 06:42

Carla, que bom que tenha gostado, nao consigo te falar onde est o erro. eu preciso analizar a sua pasta de trabalho do Excel, se possivel mande no meu e-mail edivan.cabral@yahoo.com.br.. a farei uma depurao e te digo o que est errado, talvez tenha sido algo que eu mesmo coloquei rsrsrrsrrsr estou no aguardo...
Responder

3. Carla Rebouas10 de maio de 2013 07:16

Edivan, Obrigada pela presteza!! Acabei de mandar a planilha pro seu e-mail. Mais uma vez obrigada e fico no aguardo do salvamento!! kkk
Responder

4. Carla Rebouas12 de maio de 2013 08:41

Edivan, estou precisando de mais um help. Voc poderia me ajudar? S falta a correo desse cdigo para finalizar minha planilha... Os dados no esto sendo enviados para a planilha controle que deveria manter o histrico de cadastro FRM_MATERIAIS. Rearrumei e ficou conforme abaixo. No est dando erro agora, mas tb no transfere!! Private Sub btnSALVAR_Click() Dim iRow_1 As Long Dim ws_1 As Worksheet Set ws_1 = Worksheets.Application.Sheets("CONTROLE") iRow_1 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_1.Cells(iRow_1, 1).Value = TXT_NUMERO.Value ws_1.Cells(iRow_1, 2).Value = ComboBox1.Value ws_1.Cells(iRow_1, 3).Value = TextEspec1.Value ws_1.Cells(iRow_1, 4).Value = TextInsumo1.Value ws_1.Cells(iRow_1, 5).Value = TextQuant1.Value Dim iRow_2 As Long Dim ws_2 As Worksheet Set ws_2 = Worksheets.Application.Sheets("CONTROLE") iRow_2 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_2.Cells(iRow_2, 1).Value = TXT_NUMERO.Value ws_2.Cells(iRow_2, 2).Value = ComboBox2.Value ws_2.Cells(iRow_2, 3).Value = TextEspec2.Value ws_2.Cells(iRow_2, 4).Value = TextInsumo2.Value ws_2.Cells(iRow_2, 5).Value = TextQuant2.Value Dim iRow_3 As Long Dim ws_3 As Worksheet Set ws_3 = Worksheets.Application.Sheets("CONTROLE") iRow_3 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_3.Cells(iRow_3, 1).Value = TXT_NUMERO.Value ws_3.Cells(iRow_3, 2).Value = ComboBox3.Value ws_3.Cells(iRow_3, 3).Value = TextEspec3.Value ws_3.Cells(iRow_3, 4).Value = TextInsumo3.Value ws_3.Cells(iRow_3, 5).Value = TextQuant3.Value Dim iRow_4 As Long Dim ws_4 As Worksheet Set ws_4 = Worksheets.Application.Sheets("CONTROLE") iRow_4 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_4.Cells(iRow_4, 1).Value = TXT_NUMERO.Value ws_4.Cells(iRow_4, 2).Value = ComboBox4.Value ws_4.Cells(iRow_4, 3).Value = TextEspec4.Value ws_4.Cells(iRow_4, 4).Value = TextInsumo4.Value ws_4.Cells(iRow_4, 5).Value = TextQuant4.Value

Dim iRow_5 As Long Dim ws_5 As Worksheet Set ws_5 = Worksheets.Application.Sheets("CONTROLE") iRow_5 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row

ws_5.Cells(iRow_5, 1).Value = TXT_NUMERO.Value ws_5.Cells(iRow_5, 2).Value = ComboBox5.Value ws_5.Cells(iRow_5, 3).Value = TextEspec5.Value ws_5.Cells(iRow_5, 4).Value = TextInsumo5.Value ws_5.Cells(iRow_5, 5).Value = TextQuant5.Value Dim iRow_6 As Long Dim ws_6 As Worksheet Set ws_6 = Worksheets.Application.Sheets("CONTROLE") iRow_6 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_6.Cells(iRow_6, 1).Value = TXT_NUMERO.Value ws_6.Cells(iRow_6, 2).Value = ComboBox6.Value ws_6.Cells(iRow_6, 3).Value = TextEspec6.Value ws_6.Cells(iRow_6, 4).Value = TextInsumo6.Value ws_6.Cells(iRow_6, 5).Value = TextQuant6.Value Dim iRow_7 As Long Dim ws_7 As Worksheet Set ws_7 = Worksheets.Application.Sheets("CONTROLE") iRow_7 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_7.Cells(iRow_7, 1).Value = TXT_NUMERO.Value ws_7.Cells(iRow_7, 2).Value = ComboBox7.Value ws_7.Cells(iRow_7, 3).Value = TextEspec7.Value ws_7.Cells(iRow_7, 4).Value = TextInsumo7.Value ws_7.Cells(iRow_7, 5).Value = TextQuant7.Value Dim iRow_8 As Long Dim ws_8 As Worksheet Set ws_8 = Worksheets.Application.Sheets("CONTROLE") iRow_8 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_8.Cells(iRow_8, 1).Value = TXT_NUMERO.Value ws_8.Cells(iRow_8, 2).Value = ComboBox8.Value ws_8.Cells(iRow_8, 3).Value = TextEspec8.Value ws_8.Cells(iRow_8, 4).Value = TextInsumo8.Value ws_8.Cells(iRow_8, 5).Value = TextQuant8.Value Dim iRow_9 As Long Dim ws_9 As Worksheet Set ws_9 = Worksheets.Application.Sheets("CONTROLE") iRow_9 = ws_1.Cells(Rows.Count, 2) _ .End(xlUp).Offset(1, 0).Row ws_9.Cells(iRow_9, 1).Value = TXT_NUMERO.Value ws_9.Cells(iRow_9, 2).Value = ComboBox9.Value ws_9.Cells(iRow_9, 3).Value = TextEspec9.Value ws_9.Cells(iRow_9, 4).Value = TextInsumo9.Value ws_9.Cells(iRow_9, 5).Value = TextQuant9.Value MsgBox "DADOS GRAVADOS COM SUCESSO!" Muito Obrigada!

CDIGOS VBA MODELOS...

FUNO NUM_AUTO

Bom galera com a inteno de agilizar o tempo e o aprendizado estou desenvolvendo Cdigos Modelos onde vamos trocar apenas as referncias do cdigo e em alguns segundos ter um cdigo funcionando perfeitamente... O cdigo de hoje o mesmo que usei nos dois posts que fiz sobre cadastro, o mesmo foi usado para gerar um numero de registro para cada item cadastrado... Quem no viu os post sobre Cadastro tirem um tempinho e leiam pois fundamental praticar para entender como funciona e assim poder caminhar de acordo com sua necessidade... Vejam o cdigo e em seguida farei um exemplo usando-o em uma planilha.... a qual sugiro que salvem para darmos continuidade nos prximos posts...
Function NOME() Dim BANCO As Database Dim TABELA As Recordset Set BANCO = OpenDatabase(ThisWorkbook.Path & "/" & ThisWorkbook.Name, False, False, "EXCEL 8.0") Set TABELA = BANCO.OpenRecordset("PLANILHA$") If TABELA.EOF And TABELA.BOF Then FORMULARIO.OBJETO = 1 Else TABELA.MoveLast FORMULARIO.OBJETO = Format(TABELA("CAMPO") + 1) End If End Function

EXPLICANDO AS MARCAES
(todo o restante do cdigo s copiar e colar)

NOME = NOME PELO QUAL A FUNO SER CHAMADA QUANDO HOUVER NECESSIDADES... PLANILHA = NOME DA PLANILHA QUE RECEBER O CDIGO CRIADO NA HORA DA GRAVAO... FORMULARIO = NOME DO USERFORM... OBJETO = NOME DO OBJETO O QUAL IR EXIBIR O NMERO... CAMPO = CAMPO NA PLANILHA ONDE CONTEM AS INFORMAES DO NUMERO AUTOMTICO...

NA PRTICA Bom ento vamos por em prtica o cdigo modelo... No vou fazer o passo a passo, pois tenho 2 posts divididos em 3 partes cada, que explica como fazer cada ao descrita neste post... 1 Abrir o Excel e salvar como "Pasta de trabalho Habilitada para Macros"

2 Habilitar a referencia "Microsoft DAO 3.6 Object Library"

Veja como se faz em meu blog no post : http://excelamador.blogspot.com.br/2013/02/ativando-referenciamicrosoft-dao-36.html 3 Alterar o nome da planilha... Para esse exemplo vou colocar teste_numero...

4 Colocar o titulo do nosso campo na planilha...


que nesse exemplo ser NUMERO

Finalizamos a parte da planilha agora vamos para o Editor VBA...

5 Abrir o Editor VBA (Alt + 11)...

6 Inserir um UserForm...

7 Inserir uma caixa de texto (TextBox)...

8 Inserir um Mdulo...

9 Copiar e colar o cdigo modelo dentro do mdulo1...

Agora devemos trocar as referencias, pelas respectivas em nosso projeto. Vamos iniciar trocando o nome da Funo de NOME para NUMERO...

... Devemos informar ao cdigo em qual planilha ele far referncia para o cdigo...em nosso exemplo teste_numero
PLANILHA

CAMPO ... Devemos informar tambm qual campo na planilha a referncia...que o campo NUMERO para esse exemplo

... Devemos tambm dizer qual ser o Userform usado no cdigo, pois como o cdigo est escrito dentro de um mdulo, ento o no ir encontrar o formulrio sem a sua descrio...
FORMULARIO

... O objeto o que ir mostrar na tela o numero do registro a ser gravado...


OBJETO

Pronto agora s abrir o cdigo do formulrio no evento initialize e chamar a funo criada dentro do mdulo 1...

Ao executar o UserForm o resultado dever ser 1, sendo que ainda no tem nenhuma informao em nosso banco de dados....

Vou inserir nmeros de 1 a 3 na tabela e rodar de novo o formulrio...

Bom isso a, vai sempre gerando um numero aps o ultimo na tabela... Espero que estejam gostando, e amanha se sobrar tempo irei pegar a partir desse ponto, dando continuidade nessa mesma pasta de trabalho, ento se voc quiser pode salvar para usar a mesma, assim o arquivo vai ficando como modelo para eventuais consultas...

O prximo post pretendo mostrar o modelo de cdigo que fiz para cadastro lembrando que exatamente igual ao cdigo mostrado nos 2 posts que fiz relacionados com o assunto cadastro... Se no viu ainda tire um tempo e leia, pois fundamental... Abraos a todos os leitores, dvidas deixem comentrios ou mandem email para edivan.cabral@yahoo.com.br

CDIGO VBA PARA CADASTROS EM GERAL Bom galera hoje irei dar continuidade ao post 2 do projeto Agenda Telefnica em VBA... Quem no leu os posts 1 e 2, recomendo que leiam pois essa a continuao deles assim fica mais fcil o entendimento e aprendizado... Parte 1:
http://excelamador.blogspot.com.br/2013/03/excel-vba-agenda-telefonica-passo-passo.html

Parte 2:
http://excelamador.blogspot.com.br/2013/03/excel-vba-projeto-agenda-telefonica.html

PARTE III

PASSO A PASSO...

Abrir a pasta de trabalho que criamos nos posts anteriores

Abrir tambm o Editor VBA (Alt + F11)...

CRIANDO O CDIGO...

Vamos abrir o mdulo, para criarmos a nossa funo que ir se chamar CADASTRO...

Dentro da funo criada vamos por o seguinte cdigo...

If frmagenda.TXT_NOME.Text = "" Then MsgBox "NOME COMPLETO OBRIGATRIO", vbExclamation frmagenda.TXT_NOME.SetFocus Exit Function Else End If 'O cdigo acima serve para avisar o usurio quando a caixa de texto TXT_NOME estiver vazia, pois no aconselhvel cadastrar informaes nulas... '----------------------------------------------------------------------------If frmagenda.TXT_TELEFONE.Text = "" Then MsgBox "TELEFONE OBRIGATRIO", vbExclamation frmagenda.TXT_TELEFONE.SetFocus Exit Function Else End If 'O cdigo acima faz a mesma coisa do primeira porm analisar a caixa de texto TXT_TELEFONE.... '----------------------------------------------------------------------------Dim linha As Integer Dim BANCO As Database Dim TABELA As Recordset Set BANCO = OpenDatabase(ThisWorkbook.Path & "/" & ThisWorkbook.Name, False, False, "EXCEL 8.0") 'abre o banco de dados Sql = "insert into [AGENDA$] (NUMERO,NOME,TELEFONE)VALUES ('" & frmagenda TXT_CODIGO & "','" & frmagenda TXT_NOME& "','"

& frmagenda.TXT_TELEFONE& "')" BANCO.Execute Sql BANCO.Close '--------------------------------------------------------------------------------Mdulo1.NUM_AUTO 'uma vez que efetuado o cadastro o cdigo acima ir chamar a funo NUM_AUTO para gerar o prximo numero a ser cadastrado '-------------------------------------------------------------------------------frmagenda.TXT_NOME.Text = "" frmagenda.TXT_TELEFONE.Text = "" frmagenda.TXT_NOME.SetFocus

Aps isso devemos chamar esse cdigo dentro do evento click do boto gravar, para isso basta dar um clique duplo nele, para abrir o seu cdigo que se abre assim:

no local marcado com um trao onde vamos escrever o cdigo:

mdulo1.CADASTRO

pronto agora para testar s executar o formulrio e cadastrar as informaes...

EXPLICANDO O CDIGO...
PARA FAZER UM SEMELHANTE VOC DEVER APENAS TROCAR OS OBJETOS MENCIONADOS PELOS SEUS OBJETOS. O RESTANTE DO CDIGO S COPIAR E COLAR...

frmagenda = NOME DO USERFORM

TXT_NOME = NOME DO OBJETO CAIXA DE TEXTO

TXT_TELEFONE = NOME DO OBJATO CAIXA DE TEXTO

MsgBox = CHAMA UMA MENSAGEM EXIBINDO O TEXTO QUE ESTIVER DENTRO DOS PARENTESES...

AGENDA = NOME DA PLANILHA

NUMERO,NOME,TELEFONE = CAMPOS DA PLANILHA

('" & frmagenda TXT_CODIGO & "','" & frmagenda TXT_NOME& "','" & frmagenda.TXT_TELEFONE& "')" = CAMPOS NO FORMULRIO

ISSO A TROCANDO ESSAS INFORMAES PELAS SUAS O SEU PROJETO TER QUE FUNCIONAR PERFEITAMENTE, MAS AT VOC CONHECER CADA LINHA DE CDIGO, FAA ESSE POST EXATAMENTE COMO DESCRITO DESDE A PARTE 1 AT A 3, PARA VOC APRENDER DE VERDADE A FAZER....

AGENDA TELEFNICA EM EXCEL VBA

Boa tarde! Galera como prometido a est... Esse o formulrio que criei para o meu programa "Agenda Eletrnica", bem simples mesmo apenas para treinar e aperfeioar os conhecimentos em Excel VBA.

CADASTRO
Coloquei poucos campos (text box) para incluir as informaes em nossa agenda, segue:

Nome Sobrenome CPF RG 4 Campos para telefones Endereo Cidade CEP E-Mail SITE

LISTA DE EXIBIO DOS DADOS


O espao branco no meio a lista onde sero exibidos todos os registros cadastrados e assim como os pesquisados pelo usurio. Clicando em um item na lista o mesmo ser carregado para os campos de

cadastro, podendo assim ser alterado ou mesmo excludo do banco de dados, e ao mesmo tempo desabilitar o boto gravar pois os dados esto expostos para edies assim evita o cadastramento duplicado...

BOTES
Coloquei 4 botes os quais eu julgo extremamente necessrios: 1 Gravar 2 Alterar 3 Excluir 4 Novo

BOTES MAXIMIZAR E MINIMIZAR


Notem tambm que coloquei botes que iro minimizar a janela, e assim podemos usar outras planilhas do Excel j que os formulrios comuns no permitem isso...

isso galera... quando tiver tempo vou postar passo a passo a criao desse sistema, lembrando que bem simples e o objetivo aumentar conhecimento, pois cada um dentro das suas necessidades cria o que quiser atravs dos conhecimentos adquiridos de terceiros...

Valeu e at a prxima...