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

Modelo Cadastro V3 - Adaptações

Tutoriais elaborados da comunidade
Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Modelo Cadastro V3 - Adaptações

Mensagem por Mauro Coutinho »

Caros colegas, dando contínuidade ao Tópico que iniciei referente as :
Principais Mudanças do ModeloCadastro V3 (viewtopic.php?f=5&t=366),
e vendo a dificuldade daqueles que não teem muita intimidade com VBA ou estão iniciando, resolvi me aprofundar um pouco mais, passando mais algumas noções :

Antes de mais nada, precisamos ter em mente o conceito referente a:
Pasta e Planilha (Workbook, Worksheet), e como é um assunto um pouco complexo e Longo, vocês podem usar a própria Ajuda do VBA para entender um pouco mais ou nos endereços abaixo, aonde tem as definições muito bem explicadas.
1) Lição 04: VBA - Trabalhando com o objeto Application
http://www.juliobattisti.com.br/excel12 ... licao4.htm
2 ) Lição 05: Trabalhando com o Objeto Workbook
http://www.juliobattisti.com.br/excel12 ... licao5.htm
3 ) Lição 06: Trabalhando com o Objeto Worksheet
http://www.juliobattisti.com.br/excel12 ... licao6.htm

Algumas das duvidas e confusões que percebi em alguns Modelos adaptados, é que como no Modelo Cadastro V3 utiliza dois Arquivos, e na Pasta Front_End temos dois Ranges Nomeados referentes ao Caminho e Nome do Arquivo, e esses nomes estão definidos como PASTA_DADOS e ARQUIVO_DADOS, aonde o primeiro, PASTA, não se refere ao nome da pasta em questão e sim o Local, Caminho em que se encontra o ARQUIVO_DADOS(ModeloCadastro_Dados.xls) e o segundo, o Nome do Arquivo.

Ficando essa parte entendida vamos para a rotina :
Aqui colocarei somente a parte que acho mais importante, quando resolvemos implementar em nossas adaptações o uso de mais de uma Planilha no Arquivo ModeloCadastro_Dados.xls alem da Fornecedores:

Então no Formulário CADASTRO, na DECLARAÇÃO temos :

As Variaveis referentes as Colunas (Constante = 1,2,3..), aonde podem observar tambem, que, utilizamos Nomes que condizem com o que queremos, ou seja, colCodigoDoFornecedor, ao analizarmos a rotina já sabemos que se trata de um Valor Numérico sendo este o "Código do Fornecedor" que se encontram na Coluna A(1) e assim sucessivammente :
Const colCodigoDoFornecedor As Integer = 1
Const colNomeDaEmpresa As Integer = 2
Const colNomeDoContato As Integer = 3


Nessas Linhas, definimos as Cores BackGround dos Controles:(Opcional)
Const corDisabledTextBox As Long = -2147483633
Const corEnabledTextBox As Long = -2147483643


A Variável em destaque aonde definimos com a Constante o Nome do Objeto :
Const nomePlanilhaCadastro As String = "Fornecedores"

Logo abaixo temos :
A Variável wsCadastro
O objeto Worksheet representa uma planilha
Private wsCadastro As Worksheet

A Variável wbCadastro
Workbook representa uma pasta de trabalho
Private wbCadastro As Workbook
Observem que na linha acima, enquanto não alterarmos a Referência a variavel wbCadastro a mesma representa a Pasta Ativa.

Depois temos mais duas variáveis importantes :
Const indiceMinimo As Byte = 2
Aonde definimos a Linha 2 como Inicial na Planilha Fornecedores(nomePlanilhaCadastro) em que se
encontram os Registros, ja que a Linha 1 é o Cabeçalho, e,

Private indiceRegistro As Long
Nessa variável alguns teem feito confusão entendendo como sendo a Linha, mas na verdade indiceRegistro é quem define qual registro será carregado, e o índice é o número da linha na planilha, e que atraves da rotina CarregaRegistroPorIndice alimenta e define o IndiceRegistro informando em qual linha o mesmo se encontra.
Public Sub CarregaRegistroPorIndice(ByVal indice As Long)
........... 'carrega os dados do registro baseado no índice
...........indiceRegistro = indice
Call CarregaRegistro
End Sub
Tomando por base o exposto acima, conseguiremos entender as outras rotinas, CarregaRegistro, AtualizaRegistroCorrente, SalvaRegistro e os eventos dos botões que usam essa informação.

Nessa segunda parte irei mostrar como efetuamos as referencias a uma nova planilha adicionada ao arquivo ModeloCadastro_Dados.xls alem da Fornecedores ja existente:

Abrimos o Arquivo ModeloCadastro_Dados.xls normalmente, criamos uma nova planilha(ABA) e damos o nome de Clientes.
Criamos um Cabeçalho somente com 3 colunas, colCodCliente, colNomeCliente e colTelefoneCliente, depois criamos as variáveis e atribuímos as Const para as colunas conforme mostrado acima, como estamos utilizando a mesma formatação da planilha Fornecedores, algumas varáveis poderiam ser mantidas, mas por enquanto as deixamos como estão.
Feito isso vamos criar a referencia a planilha Clientes, então como já temos a variavel que define a nomePlanilhaCadastro como Fornecedores, adicionamos uma nova da seguinte forma:
Const nomePlanilhaClientes As String = "Clientes", depois criamos outra variavel informando que a mesma é uma planilha:
Private wsCliente As Worksheet,
e como estamos utilizando o mesmo Workbook (wbCadastro) NÃO alteramos essa referencia.

Concluído as Variáveis acima, na Rotina, DefinePlanilhaDados adicionamos a referencia a essa nova Planilha, colocando logo APÓS a instrução:
Set wsCadastro = wbCadastro.Worksheets(nomePlanilhaCadastro)
a referência à nova Planilha da seguinte forma:
Set wsCliente = wbCadastro.Worksheets(nomePlanilhaClientes)

Agora, sempre que quisermos buscar os registros na planilha Clientes usamos a referencia criada acima (wsCliente), é lógico que temos de fazer as adaptações nas demais rotinas:

Por exemplo usando a rotina CarregaRegistro que traz os Registros que estão na planilha Fornecedores, poderiámos utilizar uma instrução IF . .Else para verficarmos a qual planilha estamos pesquisando, mas isso fica para outro dia, então, da maneira mais simples criamos uma nova rotina, ficando assim :
Private Sub CarregaRegistroCliente()
'carrega os dados do primeiro registro
....With wsCliente
.......If Not IsEmpty(.Cells(indiceRegistro, colCodCliente)) Then
...........Me.txtCodigoFornecedor.Text = .Cells(indiceRegistro, colCodCliente).Value
...........Me.txtNomeEmpresa.Text = .Cells(indiceRegistro, colNomeCliente).Value
...........Me.txtNomeContato.Text = .Cells(indiceRegistro, colTelefoneCliente).Value
.......End If
....End With
End Sub
Como podem observar, usei a Variável indiceRegistro, sendo que para a Rotina acima devemos efetuar as devidas alterações, ou redirecionando a mesma para a planilha Clientes ou criando novas rotinas, o que eu acho mais viável, para começarmos a entendermos sua lógica.
Exemplificando somente uma linha, na Rotina do Botão OK, opção Excluir aonde temos :

Código: Selecionar todos

wsCadastro.Range(wsCadastro.Cells(indiceRegistro, colCodigoDoFornecedor), wsCadastro.Cells(indiceRegistro, colCodigoDoFornecedor)).EntireRow.Delete
Ficaria assim :
wsCliente.Range(wsCliente.Cells(indiceRegistro, colCodCliente), wsCliente.Cells(indiceRegistro, colCodCliente)).EntireRow.Delete
Por hora seria isso, com as explicações acima ja temos material para adicionarmos quantas planilhas quisermos e referencia-las, frizando que é somente uma introdução basica referente ao Formulário Cadastro e aos Arquivos, mas se levado a sério e assimilarmos tudo, as outras rotinas tiramos de letra, conseguindo entender as rotinas do formulário PESQUISA, e tambem para que os colegas tenham uma noção o porque sempre frizo da importância de acertarmos os nomes e referencias de acordo com a adaptação, quando nos porpomos a ajudar, ficando mais fácil de localizar o erro.

Espero ter conseguido me expressar da forma correta, e de maneira clara, e de ante mão peço desculpas se errei em alguma linha, ou expressão, mas que podemos consertar na sequencia.

abraços, e até a próxima.


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.


kaiocezar
Colaborador
Colaborador
Mensagens: 20
Registrado em: Qua Mar 21, 2012 12:29 pm

Re: Modelo Cadastro V3 - Adaptações

Mensagem por kaiocezar »

Primeiramente obrigado pela instrucao,

porem tenho uma pergunta, este seu exemplo de alteracao seria para quando temos a mesma formatacao em todas as planilhas, ou seja, os nomes das coluna sao o mesmo! porem como deveremos proceder quando por exemplo as colunas de uma planilha nao sao igual as outras?

Exemplo eu possua 3 planilhas, a unica informacao igual entre elas, eh o codigo do fornecedore, pelo qual eu gostaria de fazer uma busca e que esse busca me retornasse informacoes das 3 planilhas que eu possou!!

Obrigado desde ja pela atencao!

Kaio


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Modelo Cadastro V3 - Adaptações

Mensagem por Mauro Coutinho »

kaio, se entendi corretamente, você tem 3 abas diferentes, mas em cada uma o único relacionamento com as demais é o código, não sei qual a finalidade, mas eu não usaria este sistema, pelo fato de ter de realizar busca em todas o que demandaria varias adaptações :

1°) Temos de definir Variaveis para as 3 abas, por exemplo :
Private wsCodigos As Worksheet
Set wsCodigos = wbCadastro.Worksheets(nomePlanilhaCodigos)

Private wsCliente As Worksheet
Set wsCliente = wbCadastro.Worksheets(nomePlanilhaClientes)

Private wsEndereco As Worksheet
Set wsEndereco = wbCadastro.Worksheets(nomePlanilhaEndereco)

Lógicamente, seguindo as informações acima, e depois, um pouco mais complicado. seria montar a instrução SQL para buscar nas Abas pelos nomes das Colunas.

Com certeza da para se fazer, mas realmente, a não ser que seja extritamente necessário eu não recomendo, pois existe uma grande chance de deixarmos o aplicativo lento dependendo da qde de informações que temos de lidar.

[]s


Avatar do usuário
Melo
Colaborador
Colaborador
Mensagens: 70
Registrado em: Ter Jan 12, 2010 4:26 pm

Re: Modelo Cadastro V3 - Adaptações

Mensagem por Melo »

Irmão,

Excelente, meus parabéns.

Muito boa o explicativo, estou aprendendo muito.

Valeu obrigado.
vou aguardar novas adaptações.


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.


SaraOliveira
Colaborador
Colaborador
Mensagens: 17
Registrado em: Sex Set 15, 2017 8:29 am

Re: Modelo Cadastro V3 - Adaptações

Mensagem por SaraOliveira »

Existe alguma versão alternativa do Modelo 3, cuja salvamento é feito no mesmo arquivo, como a versão 2?


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