Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Excel - Modelos Avançados

Tutoriais elaborados da comunidade
Avatar do usuário
kedim43
Colaborador
Colaborador
Mensagens: 45
Registrado em: Dom Fev 05, 2012 3:12 pm
Localização: Goias
Contato:

Excel - Modelos Avançados

Mensagem por kedim43 »

Salve Galera...
Navegando muito? Tenho certeza que sim.

Estou meio sem tempo para compartilhar o Conhecimento com Todos, e digo que em breve retomo a Rotina com vocês.

Não sei se o Tomas Aprova, mais gostaria de Compartilhar com todos do blog este prático Sistema de Login que utilizo em meu Sistema Industrial.
Isso mesmo... Desenvolvi um Excelente Sistema de Gestão, voltado para Gestão Industrial. (Vocês não perdem por esperar a Surpresa que lhes reservei)...

Todo Feito em SQL, tudo On Line ou via Servidor Local (Xampp), e Driver de Comunicação Virtual ODBC 3.51, de facil assimilação e configuração.

Caso queiram conhecer um pouco mais, podem enviar email para minha caixa do blog ou deixar a solicitação de envio, já que o mesmo é quase 6 mb de dados e telas e mais 8 mb de banco de dados já para ser migrado e testado.

Obrigado Tomas pelo espaço.

valeu Galera e não se assustem... é apenas Excel... Eu Sei!

Uma Breve Previa a Todos...

Veja os Codigos que vocês iram aprender...

Login


' Variaveis de Comando

Dim banco As ADODB.Connection
Dim tabela As Recordset
Dim data As String

'Codigo do botão Login
'Notem que cada ação é trabalhada desde o inicio de tudo...
'Inicio da Tomada de decisão "Sim"
Private Sub CMDLOGIN_Click()

resposta = MsgBox("Deseja Continuar " & Me.Text_nome & " - " & Me.Combo_confirmacao & "?", 36, "Mensagem")

If resposta = (vbYes) Then

'Aqui é um tratamento de erros
'Caso gere erro com o servidor, isto mesmo, agora trabalharemos com servidores Online ou Local, depende de você e sua curiosidade

On Error GoTo TratErr

'Campos Obrigatórios

If Me.Text_nome.Text = "" Then
MsgBox ("Campo Obrigatório 'Usuário'"), 6, ("Mensagem")
Text_nome.SetFocus
Exit Sub
End If

If Me.Text_senha.Text = "" Then
MsgBox ("Campo Obrigatório 'Password'"), 6, ("Mensagem")
Text_senha.SetFocus
Exit Sub
End If

If Me.Combo_confirmacao.Text = "" Then
MsgBox ("Campo Obrigatório 'Confirmação'"), 6, ("Mensagem")
Combo_confirmacao.SetFocus
Exit Sub
End If


'Aqui é onde trabalhamos com a conexão com o banco de dados...

Set banco = CreateObject("ADODB.Connection")

'Conexão on line, é esta linha de código
'banco.Open "driver=mysql ODBC 3.51 Driver;server=mysql.seu site;database=suatabela;uid=usuario;pwd=suasenha;"

'Aqui é para servidor local Xampp
'banco.Open "driver=mysql ODBC 3.51 Driver;server=localhost;database=suatabela;uid=usuario;pwd=suasenha;"

'Aqui é o pulo da Onça, ao se tentar logar, sem acesso registrado, tudo é gravado, incluisive a hora do acesso
Set tabela = CreateObject("ADODB.RecordSet")
Set tabela.ActiveConnection = banco
data = Format(Me.Text_data, "yyyy-mm-dd")

'Onde inserir os dados... e quais serão inseridos
sql = "insert into login (usuario,hora,data) VALUES ('" & Me.Text_nome.Text & "','" & Me.Text_horas.Text & "','" & data & "')"
banco.Execute sql

banco.Close


Set banco = CreateObject("ADODB.Connection")

'Conexão on line, é esta linha de código
'banco.Open "driver=mysql ODBC 3.51 Driver;server=mysql.seu site;database=suatabela;uid=usuario;pwd=suasenha;"

'Aqui é para servidor local Xampp
'banco.Open "driver=mysql ODBC 3.51 Driver;server=localhost;database=suatabela;uid=usuario;pwd=suasenha;"

'Agora vamos para a parte de usuários, Veja...

Set tabela = CreateObject("ADODB.RecordSet")
Set tabela.ActiveConnection = banco

'Localizar o Usuário registrado
'Note a String "%', caso seja necessário, remova a mesma que o sistema irá forçar e trabalhar com busca direta e não em porcentagem...

tabela.Open "select * from usuario where usuario Like '" & Me.Text_nome.Text & "%';"

'Verificando a tabela...

If tabela.EOF And tabela.BOF Then

'Sem registro, temos...
MsgBox "" & Me.Text_nome & " - Solicite Usuário e Senha. ", vbInformation, ("Mensagem")

Else

'Registrado temos...
If Me.Text_nome = tabela("usuario") And Me.Text_senha = tabela("senha") And Me.Combo_confirmacao = tabela("confirmacao") Then

'Note a direção de cada Confirmação
If Me.Combo_confirmacao.Text = "DIRETOR" Then

Form_menu.Show
Me.Hide

Me.Text_senha.Text = Clear
Me.Combo_confirmacao.Text = Clear
End If

If Me.Combo_confirmacao.Text = "COORDENADOR" Then

Form_menu.Show
Me.Hide

Me.Text_senha.Text = Clear
Me.Combo_confirmacao.Text = Clear
End If

If Me.Combo_confirmacao.Text = "ADMINISTRADOR" Then

Form_menu.Show
Me.Hide

Me.Text_senha.Text = Clear
Me.Combo_confirmacao.Text = Clear
End If

If Me.Combo_confirmacao.Text = "RECURSOS HUMANOS" Then

Form_menu_RH.Show
Me.Hide

Me.Text_senha.Text = Clear
Me.Combo_confirmacao.Text = Clear
End If

If Me.Combo_confirmacao.Text = "SEGURANÇA" Then

Form_menu_ALMOXARIFADO.Show
Me.Hide

Me.Text_senha.Text = Clear
Me.Combo_confirmacao.Text = Clear
End If

If Me.Combo_confirmacao.Text = "ALMOXARIFADO" Then

Form_menu_ALMOXARIFADO.Show
Me.Hide

Me.Text_senha.Text = Clear
Me.Combo_confirmacao.Text = Clear
End If


End If

'Fim da opção "Sim"

'Inicio da Opção "Não"...

If resposta = (vbNo) Then

Me.Text_nome.Text = Clear
Me.Text_senha.Text = Clear
Me.Combo_confirmacao.Text = Clear
Me.Text_nome.SetFocus

MsgBox ("Seu Acesso Foi Cancelado!"), vbCritical, ("Mensagem")

End If

banco.Close

'Aqui é para onde o sistema desvia o código, caso haja algum erro no servidor...
TratErr:
If Err.Number <> 0 Then
MsgBox ("Impossível Localizar o Servidor"), vbInformation, ("Mensagem")
End If

End If

End If

End Sub

'Incremento para que fique mais chamativo nosso Login

Private Sub Text_senha_Change()

On Error Resume Next

If Me.Text_senha.Text <> "" Then
Me.Label6.Visible = True
Text_senha.Value = UCase(Text_senha.Value)
End If

If Me.Text_senha.Text = "" Then
Me.Label6.Visible = False
End If

End Sub

'Cancelando o Botão Fechar no alto do Form...

Private Sub UserForm_QueryClose _
(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End Sub

'Finalizando sem salvar, Botão Sair...

Private Sub cmdFechar_Click()
'ThisWorkbook.Close SaveChanges:=True
CloseNotSave
End Sub

'Outro complemento para chamar a atenção...

Private Sub Text_nome_Change()
Text_nome.Value = UCase(Text_nome.Value)
If Text_nome.Text = "" Then
Me.Text_senha.Visible = False
Me.Combo_confirmacao.Visible = False
Me.Label2.Visible = False
Me.Label7.Visible = False
Me.Text_nome.Text = Clear
Me.Text_senha.Text = Clear
End If

If Me.Text_nome.Text <> "" Then
Me.Text_senha.Visible = True
Me.Label2.Visible = True
Me.Combo_confirmacao.Visible = True
Me.Label7.Visible = True
End If

End Sub

'Aqui mais algumas coisas bacanas pra galera...

Private Sub UserForm_Initialize()

'Para Usar esta linha de codigo, caso, queiram, me avisem que deixo a segunda parte de como fazer isto..
' Dim hWnd As Long

'Vai para o topo do formulário
' ScrollTop = 0

'Define os botões minimizar e maximizar do form
'hWnd = FindWindow(vbNullString, Form_Login.Caption)
'SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080
' Metodo Invisivel do Excel
Application.Visible = False

Me.Text_horas.Value = Format(time, "HH:MM")
Me.Text_data.Value = Format(Now, "DD/MM/YYYY")

Me.Combo_confirmacao.AddItem "DIRETOR"
Me.Combo_confirmacao.AddItem "COORDENADOR"
Me.Combo_confirmacao.AddItem "ADMINISTRADOR"
Me.Combo_confirmacao.AddItem "RECURSOS HUMANOS"
Me.Combo_confirmacao.AddItem "SEGURANÇA"
Me.Combo_confirmacao.AddItem "ALMOXARIFADO"


End Sub

Private Sub UserForm_Terminate()
Application.Visible = True
End Sub

Bom, é isso ai galera...
Ensinei a vocês um pouco de SQL para banco de dados On Line ou Local.
Para utilizar o codigo, deve se ter instalado o Xampp, para gerar o banco de dados e o Driver Odbc Configurado.
Ensino a todos, em detalhes sobre o Xampp e o Driver ODBC em nosso proximo post...

Valeu galera, desenvolvam a tela, o código ja está liberado para todos.

Ensino a vocês sobre o Xampp e ODBC na data de 15/04/2013...
Valeu...
Editado pela última vez por kedim43 em Seg Abr 01, 2013 7:18 pm, em um total de 4 vezes.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Excel - Modelos Avançados

Mensagem por Mikel Silveira Fraga »

kedim, meus parabens cara.

Excelente trabalho o seu. Estou tentando caminhar para este lado, estou tendo apenas dificuldade com o tempo, mas esse teu trabalho vai ser de inspiração incrivel.

Já trabalho com Excel e MySQL, não tenho a manha de colocar o banco online e não entendo muito de rede (minhas deficiencias), mas acabando minha facul vou providenciar isso.

Gostei muito do seu trabalho.

Vlw por compartilhar.


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Excel - Modelos Avançados

Mensagem por joseA »

Grande Kedim,

Não entendo muito sobre esse sistema, espero que tenha paciência e disposição p/ explicações.

Sem dúvida seria fascinante everedar por um novo caminho. :D


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Excel - Modelos Avançados

Mensagem por webmaster »

kedim,

De imediato, parabéns pelo trabalho. Quanto ao anúncio, digamos que vou passar desta vez devido a grande colaboração, mas não posso deixar de considerar que se trata de uma propaganda de um produto que também é comercial. Seria injusto com outros que pagam para ter este espaço. Mencioná-lo não há problemas, mas sem argumentos publicitários, ok?

Abraços


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Excel - Modelos Avançados

Mensagem por Mikel Silveira Fraga »

kedim43, boa noite.

Não tem a ver 100% com o tópico, mas talvez você consiga me ajudar.

Estou com um problema imenso para gerar um Insert em BD's do MySQL, quando relacionado a um tipo de campo Double.

Preciso trabalhar com valores fracionados, por exemplo, 3,45 ton. Já consegui configurar campo como Double(10,4), onde meu campo tem 10 caracteres, sendo 4 deles para o fracionado. O erro ocorre no Insert devido o Mysql trabalhar com o padrão americando de número (1,111,111.11), mas os pc's em português trabalharem com outro padrão (1.111.111,11).

Já tentei de tudo para resolver essa situação, desde converter a variável do TextBox com CDbl(), como tentar formatar com o Format(), mas sem solução.

Se puder dar uma dica, vai ajudar muito, principalmente meu orgulho... kkkkkkkkkkk

Abraços e mais uma vez meus parabens pelo trabalho.


Avatar do usuário
kedim43
Colaborador
Colaborador
Mensagens: 45
Registrado em: Dom Fev 05, 2012 3:12 pm
Localização: Goias
Contato:

Re: Excel - Modelos Avançados

Mensagem por kedim43 »

Mikel Silveira Fraga escreveu:kedim43, boa noite.

Não tem a ver 100% com o tópico, mas talvez você consiga me ajudar.

Estou com um problema imenso para gerar um Insert em BD's do MySQL, quando relacionado a um tipo de campo Double.

Preciso trabalhar com valores fracionados, por exemplo, 3,45 ton. Já consegui configurar campo como Double(10,4), onde meu campo tem 10 caracteres, sendo 4 deles para o fracionado. O erro ocorre no Insert devido o Mysql trabalhar com o padrão americando de número (1,111,111.11), mas os pc's em português trabalharem com outro padrão (1.111.111,11).

Já tentei de tudo para resolver essa situação, desde converter a variável do TextBox com CDbl(), como tentar formatar com o Format(), mas sem solução.

Se puder dar uma dica, vai ajudar muito, principalmente meu orgulho... kkkkkkkkkkk

Abraços e mais uma vez meus parabens pelo trabalho.
Olá...
Já tive vários problemas como o seu.
Uma boa pratica é configurar o campo no banco de dados, para tal fim, uma observação se faz necessária.
Você deve declarar esta variavel no inicio e dizer que tipo de string a variavel recebe.
Exemplo:
Dim banco As ADODB.Connection
Dim tabela As Recordset
Dim "inicio" As String

Agora um modelo pratico:
inicio = Format(Me.Text_inicio, "yyyy-mm-dd")
Note o formato passado para o banco de dados...

Outra dica é você definir que tipo de banco de dados usar, Exemplo
Int = Inteiro

Se seu campo, será preenchido com dados de soma, multiplicação e ETC, deve se passar o formato correto, veja:
CCur(TextBox1.Value)

Desta forma, creio eu que consiga resolver esta questão.
Para lhe ajudar melhor, necessito rever seu banco de dados e sua tela de inserção.

Espero ter deixado uma Luz a você.

Valeu.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Excel - Modelos Avançados

Mensagem por Mikel Silveira Fraga »

kedim, bom dia.

Obrigado pelo retorno.

Dei uma olhada nas configurações e não encontrei nada que pudesse ajudar.

Estou anexando um modelo apenas para teste. No arquivo compactado segue um sql gerado pelo HeidiSQL da base teste.

Apenas os valores inteiros estão sendo inseridos, mesmo alternando o tipo de campo entre Float/Double/Decimal.

Veja se pode analisar e retornar uma possibilidade do meu erro.

Obrigado e valeu a ajuda.
Anexos
Insert_Double.zip
(21.69 KiB) Baixado 796 vezes


Avatar do usuário
kedim43
Colaborador
Colaborador
Mensagens: 45
Registrado em: Dom Fev 05, 2012 3:12 pm
Localização: Goias
Contato:

Re: Excel - Modelos Avançados

Mensagem por kedim43 »

Mikel Silveira Fraga escreveu:kedim, bom dia.

Obrigado pelo retorno.

Dei uma olhada nas configurações e não encontrei nada que pudesse ajudar.

Estou anexando um modelo apenas para teste. No arquivo compactado segue um sql gerado pelo HeidiSQL da base teste.

Apenas os valores inteiros estão sendo inseridos, mesmo alternando o tipo de campo entre Float/Double/Decimal.

Veja se pode analisar e retornar uma possibilidade do meu erro.

Obrigado e valeu a ajuda.
Amigão veja esta linha de seu código:

sql = ""
sql = "INSERT INTO FRACIONAL (produto, preco) VALUES ('" & Me.TextBox1.Value & "','" & VBA.CCur(Me.TextBox2.Value) & "')"
Não entendo o motivo de você usar VBA.CCUR (Valor Corrente). <---- Valor Corrente

Agora veja aqui, em sua Tabela...
`preco` decimal(8,2) DEFAULT NULL, <---- Valor Decimal
O que deve estar havendo é uma variação de campos e formatos.

Me explique melhor o que você realmente deseja fazer, com mais detalhes que gero o banco em MYSQL e depois é só você migrar e usar.

Valeu...


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Excel - Modelos Avançados

Mensagem por Mikel Silveira Fraga »

Bom dia Kedim.

Essa é uma tentativa de conversão para que o Valor Financeiro seja inserido no campo.

Se retirar esse comando CCur(), o valor que vai para o campo do banco de dados é 0,00, mesmo este sendo definido como R$ 9,90 por exemplo.

Se eu declarar uma variavel vlr do tipo Double, definir o valor da variavel como

Código: Selecionar todos

vlr = CDbl(TextBox2.Value)
e em seguida no insert substituir por

Código: Selecionar todos

sql = "INSERT INTO FRACIONAL (produto, preco) VALUES ('" & Me.TextBox1.Value & "','" & vlr & "')"
ocorre de o valor inteiro apenas ser enviado para o campo do banco de dados.

Se existe uma forma de definir que o campo é valor corrente, ou simplesmente um valor fracionado dentro do próprio campo, eu não estou conseguido gerar.

Espero que tenha entendido minha dúvida.

Desde já obrigado.


Avatar do usuário
kedim43
Colaborador
Colaborador
Mensagens: 45
Registrado em: Dom Fev 05, 2012 3:12 pm
Localização: Goias
Contato:

Re: Excel - Modelos Avançados

Mensagem por kedim43 »

Mikel Silveira Fraga escreveu:Bom dia Kedim.

Essa é uma tentativa de conversão para que o Valor Financeiro seja inserido no campo.

Se retirar esse comando CCur(), o valor que vai para o campo do banco de dados é 0,00, mesmo este sendo definido como R$ 9,90 por exemplo.

Se eu declarar uma variavel vlr do tipo Double, definir o valor da variavel como

Código: Selecionar todos

vlr = CDbl(TextBox2.Value)
e em seguida no insert substituir por

Código: Selecionar todos

sql = "INSERT INTO FRACIONAL (produto, preco) VALUES ('" & Me.TextBox1.Value & "','" & vlr & "')"
ocorre de o valor inteiro apenas ser enviado para o campo do banco de dados.

Se existe uma forma de definir que o campo é valor corrente, ou simplesmente um valor fracionado dentro do próprio campo, eu não estou conseguido gerar.

Espero que tenha entendido minha dúvida.

Desde já obrigado.
Amigão veja se isto lhe ajuda.
Irei lhe passar um código do banco de dados que eu uso.
Nada complexo, mais acho que vai lhe ajudar a clarear tudo.

Veja o código que utilizo em MYSQL pra trabalhar com Estoque (Baixa e Atualização)...
Private Sub Text_total_Change()
Text_total = Format(Text_total, "Currency")
End Sub

Agora para a banco de dados utilizo a tabela formatada para VarChar com padrão em 10 itens.
Assim, até 10 numeros fracionados, iram aparecer neste formato (#.###,######).
Não sei se é isto que voce necessita.
No meu caso, utilizo isto para trabalhar com estoque em Gramas, Kilos, metros e assim por diante.

veja aqui tambem, uma parte de atualização

Private Sub TextBox2_Change()

' Erros, Trata o erro e avança
On Error Resume Next

If Me.TextBox2 <> "" Then

TextBox3.Value = CCur(TextBox1.Value) + CCur(TextBox2.Value)
End If

If Me.TextBox2 = "" Then
Me.TextBox3.Text = Clear
End If

End Sub
Note que ao final, eu disse para o SQL, que seria passado o valor obtido e não efetuei nenhuma formatação.

Qualquer dúvida, estou pronto a ajudar até resolver tudo.

Vamo que vamo! ralandro e apredendo!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder