Página 1 de 1

Modelo Cadastro V3 - Adaptações

Enviado: Sáb Set 25, 2010 12:32 am
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.

Re: Modelo Cadastro V3 - Adaptações

Enviado: Sex Abr 13, 2012 10:04 am
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

Re: Modelo Cadastro V3 - Adaptações

Enviado: Seg Abr 16, 2012 8:15 pm
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

Re: Modelo Cadastro V3 - Adaptações

Enviado: Qua Abr 25, 2012 5:14 pm
por Melo
Irmão,

Excelente, meus parabéns.

Muito boa o explicativo, estou aprendendo muito.

Valeu obrigado.
vou aguardar novas adaptações.

Re: Modelo Cadastro V3 - Adaptações

Enviado: Sex Jun 15, 2018 10:03 am
por SaraOliveira
Existe alguma versão alternativa do Modelo 3, cuja salvamento é feito no mesmo arquivo, como a versão 2?