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

ModeloCadastrov3ListView [RESOLVIDO]

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
lfrbranca
Colaborador
Colaborador
Mensagens: 26
Registrado em: Qui Jun 09, 2016 10:33 am

ModeloCadastrov3ListView [RESOLVIDO]

Mensagem por lfrbranca »

Bom dia.
Fiz o download do modelo do titulo e adaptei ao meu tipo de regitos
Como faço para que abra so a from com a planilha minimizada
e ao sair da from que feche apenas a planilha de registos e qualquer outro ficheiro de excel que tenha aberto permaneca aberto.
Acontece que substitui o Workbooks.Close por ThisWorkbook.Close, mas acontece que ao fechar o formulário o arquivos excel que se encontravam abertos ficam ocultos na barra de tarefas e quero que fiquem visiveis nessa barra e não fechem ao fechar a frm.
E estou com outro problema que os utilizadores ao fazerem novos registos grava varias vezes com o mesmo ID.
Tenho mais uma duvida na txtDATA e txtEDATA ao fazer novo preencho essas textbox com datas aconteçe que grava as datas no arquivo de dados mas na frmPesquisa na coluna de datas não aparece essas datas só aparece se forem escritas diretamente no arquivo de dados
O ficheiro esta neste link
https://www.dropbox.com/s/tvtrjo4b9lf3f ... S.zip?dl=0

Desde ja obrigado
Editado pela última vez por lfrbranca em Seg Jul 04, 2016 3:45 pm, em um total de 1 vez.


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

Mensagem por Mikel Silveira Fraga »

LfbBranca, bom dia.

Conforme as MP´s enviadas por você, irei responder cada uma de suas dúvidas por parte, ok.

1ª Dúvida:
Como faço para que abra so a from com a planilha minimizada
Inclua o código abaixo no evento Workbook_Open

Código: Selecionar todos

Private Sub Workbook_Open()

    Application.Visible = False
    
    frminicial.Show

End Sub
2ª Dúvida:
e ao sair da from que feche apenas a planilha de registos e qualquer outro ficheiro de excel que tenha aberto permaneca aberto.
Acontece que substitui o Workbooks.Close por ThisWorkbook.Close, mas acontece que ao fechar o formulário o arquivos excel que se encontravam abertos ficam ocultos na barra de tarefas e quero que fiquem visiveis nessa barra e não fechem ao fechar a frm.
Considere que exista um botão Sair no Userform Inicial, chamado btnFechar. No evento btnFechar_Click, insira o código abaixo:

Código: Selecionar todos

Private Sub btnFechar_Click()

    Unload Me

    ThisWorkbook.Close False

End Sub
Com este código, você irá fechar o Userform e a Planilha em questão, mas o Excel ainda ficará oculto. Pare que o Excel aparece, acrescente o código abaixo no evento Workbook_BeforeClose

Código: Selecionar todos

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Application.Visible = True
    
End Sub
3ª Dúvida:
E estou com outro problema que os utilizadores ao fazerem novos registos grava varias vezes com o mesmo ID.
Já identifiquei o erro dessa parte, mas vou tentar exemplificar. Suponhamos que temos dois usuários trabalhando com o arquivo, o U1 e o U2. Acontece que quando o U1 abre a Pasta de Trabalho para realizar alguma Cadastro/Pesquisa, o arquivo "LSA Registos_Dados.xls" fica aberto em segundo plano. Agora, imagine que neste mesmo momento, o U2 vai abrir a Pasta de Trabalho para realizar um outro procedimento de Cadastro. Será realizada, pelos dois usuário, a leitura da última gravação do arquivo, que é o mesmo ponto de gravação existente na abertura do arquivo, realizada pelo U1, quando abrir o arquivo. Se o U2 gerar o registro 5, por exemplo, e fechar a pasta de trabalho, esse novo registro não será atualizado para o U1, que já estava com o arquivo aberto anteriormente. Por esse motivo que, em alguns momentos, ocorre de usuários diferentes acabarem gerando o mesmo número de registro no arquivo "LSA Registos_Dados.xls".

SOLUÇÃO PROVISÓRIA: está não é, na minha opinião, a solução mais adequada, mas diante da estrutura montada, seria a única possível. Para evitar esse tipo de situação, em cada momento que for necessário realizar alguma ação no arquivo "LSA Registos_Dados.xls", deverá ser feita uma nova conexão com com o arquivo. O que quero dizer com isso? Vou abrir a planilha com os formulário. Quando abrir, por exemplo, o formulário do REGISTRO LDU, a rotina irá abrir o arquivo de dados, realizar a leitura dos registros, capturar o primeiro registro da lista e fechar o arquivo de dados no segundo plano. E quando for realizar uma pesquisa? Ao abrir o formulário de pesquisa, a rotina irá novamente abrir o arquivo de dados, realizar a pesquisa, listar todos os registro (de acordo com o filtro) e fechar o arquivo de dados no segundo plano. Resumindo: para cada ação realizada, será feito a abertura do arquivo de dados, leitura das informações e fechamento do arquivo de dados. Como esta sendo utilizado uma planilha para armazenar os dados, sendo a mesma nenhum pouco indicada para tal função, esta seria a melhor estratégia para se corrigir este erro, gerado pelo uso de múltiplos usuários.

SOLUÇÃO IDEAL: alterar todo o seu projeto para utilizar um arquivo do Access como base de dados. O Access é mais indicado para armazenamento de informações e de se trabalhar como múltiplos usuários. Essa é a mais simples solução para correção do seu problema, mas o seu projeto teria que ser totalmente readaptado para se trabalhar assim, além de que você terá que aprender mais a trabalhar com a Linguagem SQL. Acredito que essa seja a melhor solução para o seu problema.

4ª Dúvida:
E ao excluir registos elimina o ID
Geralmente, o ideal é que seja eliminado o registro, como um todo. Como disse na solução anterior, o Excel não é uma solução adequada para registro de informações e, por esse motivo, ele não tem o Controle de Registro (Id) dos registros existentes em uma Planilha/Tabela. Uma solução que já vi ser utilizada nesse tipo de situação, é a criação de uma coluna Status. Sempre que um registro for consultado/visualizado, antes seja realizada uma validação do Status desse registro. Por exemplo: você poderia criar categorias de Status como: Ativado, Desativado e Excluído. Se o Status for Ativo, o registro poderá ser exibido e editado. Caso o Status for Desativado, o registro pode ser exibido apenas. Agora, quando o Status for Excluído, esse registro não poderá ser exibido na lista de registros. Para os casos do Status Ativado e Desativado, pode ser inserido um novo campo no formulário, permitindo a alteração dessa informação. No caso do Status Excluído, esse será alterado quando o registro for selecionado e a opção Excluir for ativada.

Infelizmente, essa parte de se trabalhar com ID dentro do Excel não é uma parte fácil. Para realizar essa manutenção, levaria um certo tempo para se concluir, por isso estou deixando ai algumas dicas que possam ajudá-lo, mas reforçando que a melhor solução seria a mudança para uma estrutura utilizando um arquivo do Access como Banco de Dados.

Quaisquer novas dúvidas, estou a disposição.

Abraços e excelente semana.


lfrbranca
Colaborador
Colaborador
Mensagens: 26
Registrado em: Qui Jun 09, 2016 10:33 am

Re: ModeloCadastrov3ListView

Mensagem por lfrbranca »

Mikel Silveira Fraga escreveu:LfbBranca, bom dia.

Conforme as MP´s enviadas por você, irei responder cada uma de suas dúvidas por parte, ok.

1ª Dúvida:
Como faço para que abra so a from com a planilha minimizada
Inclua o código abaixo no evento Workbook_Open

Código: Selecionar todos

Private Sub Workbook_Open()

    Application.Visible = False
    
    frminicial.Show

End Sub
2ª Dúvida:
e ao sair da from que feche apenas a planilha de registos e qualquer outro ficheiro de excel que tenha aberto permaneca aberto.
Acontece que substitui o Workbooks.Close por ThisWorkbook.Close, mas acontece que ao fechar o formulário o arquivos excel que se encontravam abertos ficam ocultos na barra de tarefas e quero que fiquem visiveis nessa barra e não fechem ao fechar a frm.
Considere que exista um botão Sair no Userform Inicial, chamado btnFechar. No evento btnFechar_Click, insira o código abaixo:

Código: Selecionar todos

Private Sub btnFechar_Click()

    Unload Me

    ThisWorkbook.Close False

End Sub
Com este código, você irá fechar o Userform e a Planilha em questão, mas o Excel ainda ficará oculto. Pare que o Excel aparece, acrescente o código abaixo no evento Workbook_BeforeClose

Código: Selecionar todos

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Application.Visible = True
    
End Sub
3ª Dúvida:
E estou com outro problema que os utilizadores ao fazerem novos registos grava varias vezes com o mesmo ID.
Já identifiquei o erro dessa parte, mas vou tentar exemplificar. Suponhamos que temos dois usuários trabalhando com o arquivo, o U1 e o U2. Acontece que quando o U1 abre a Pasta de Trabalho para realizar alguma Cadastro/Pesquisa, o arquivo "LSA Registos_Dados.xls" fica aberto em segundo plano. Agora, imagine que neste mesmo momento, o U2 vai abrir a Pasta de Trabalho para realizar um outro procedimento de Cadastro. Será realizada, pelos dois usuário, a leitura da última gravação do arquivo, que é o mesmo ponto de gravação existente na abertura do arquivo, realizada pelo U1, quando abrir o arquivo. Se o U2 gerar o registro 5, por exemplo, e fechar a pasta de trabalho, esse novo registro não será atualizado para o U1, que já estava com o arquivo aberto anteriormente. Por esse motivo que, em alguns momentos, ocorre de usuários diferentes acabarem gerando o mesmo número de registro no arquivo "LSA Registos_Dados.xls".

SOLUÇÃO PROVISÓRIA: está não é, na minha opinião, a solução mais adequada, mas diante da estrutura montada, seria a única possível. Para evitar esse tipo de situação, em cada momento que for necessário realizar alguma ação no arquivo "LSA Registos_Dados.xls", deverá ser feita uma nova conexão com com o arquivo. O que quero dizer com isso? Vou abrir a planilha com os formulário. Quando abrir, por exemplo, o formulário do REGISTRO LDU, a rotina irá abrir o arquivo de dados, realizar a leitura dos registros, capturar o primeiro registro da lista e fechar o arquivo de dados no segundo plano. E quando for realizar uma pesquisa? Ao abrir o formulário de pesquisa, a rotina irá novamente abrir o arquivo de dados, realizar a pesquisa, listar todos os registro (de acordo com o filtro) e fechar o arquivo de dados no segundo plano. Resumindo: para cada ação realizada, será feito a abertura do arquivo de dados, leitura das informações e fechamento do arquivo de dados. Como esta sendo utilizado uma planilha para armazenar os dados, sendo a mesma nenhum pouco indicada para tal função, esta seria a melhor estratégia para se corrigir este erro, gerado pelo uso de múltiplos usuários.

SOLUÇÃO IDEAL: alterar todo o seu projeto para utilizar um arquivo do Access como base de dados. O Access é mais indicado para armazenamento de informações e de se trabalhar como múltiplos usuários. Essa é a mais simples solução para correção do seu problema, mas o seu projeto teria que ser totalmente readaptado para se trabalhar assim, além de que você terá que aprender mais a trabalhar com a Linguagem SQL. Acredito que essa seja a melhor solução para o seu problema.

4ª Dúvida:
E ao excluir registos elimina o ID
Geralmente, o ideal é que seja eliminado o registro, como um todo. Como disse na solução anterior, o Excel não é uma solução adequada para registro de informações e, por esse motivo, ele não tem o Controle de Registro (Id) dos registros existentes em uma Planilha/Tabela. Uma solução que já vi ser utilizada nesse tipo de situação, é a criação de uma coluna Status. Sempre que um registro for consultado/visualizado, antes seja realizada uma validação do Status desse registro. Por exemplo: você poderia criar categorias de Status como: Ativado, Desativado e Excluído. Se o Status for Ativo, o registro poderá ser exibido e editado. Caso o Status for Desativado, o registro pode ser exibido apenas. Agora, quando o Status for Excluído, esse registro não poderá ser exibido na lista de registros. Para os casos do Status Ativado e Desativado, pode ser inserido um novo campo no formulário, permitindo a alteração dessa informação. No caso do Status Excluído, esse será alterado quando o registro for selecionado e a opção Excluir for ativada.

Infelizmente, essa parte de se trabalhar com ID dentro do Excel não é uma parte fácil. Para realizar essa manutenção, levaria um certo tempo para se concluir, por isso estou deixando ai algumas dicas que possam ajudá-lo, mas reforçando que a melhor solução seria a mudança para uma estrutura utilizando um arquivo do Access como Banco de Dados.

Quaisquer novas dúvidas, estou a disposição.

Abraços e excelente semana.

Boas

Obrigado pela explicação
Mas como é que passo tudo para access ou basta a base de dados ser em access

Boa Semana e mais uma vez obrigado


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

Mensagem por Mikel Silveira Fraga »

LfbBranca, bom dia.

Bem, isso é algo muito complicado de se explicar em um fórum. O ideal seria você pegar um modelo que utilize esse recurso, estudar e adaptar.

Na seção Excel + Access existem vários modelos que utilizam essa combinação de aplicações.

Em específico, separei um tópico de nosso amigo LEANDRO ALVES, que pegou este modelo de cadastro que você esta utilizando, e adaptou para ser utilizado com o Access no papel de Back-End. Segue link:
- Modelo de Cadastro com BD Access

Acredito que com esse link, fique mais fácil para você conseguir adaptar os códigos e rotinas.

Ficamos a disposição, caso precise de algo.

Abraços e excelente semana.


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

Mensagem por Mikel Silveira Fraga »

Re: ModeloCadastrov3ListView alterar
Enviado: Qua Jun 22, 2016 10:59 am
por lfrbranca

Boas segui o modelo que me disse mas não consigo da erro.
este é o link se poder dei uma olhada
https://www.dropbox.com/s/v6jje9qpxcymuoy/new.zip?dl=0

Boa semana
LfrBranca, bom dia.

Conforme MP acima, peguei o novo modelo adaptado para o Access e também ocorreu o mesmo erro aqui.

Ao analisar a Query Select que esta sendo usado, vi uma divergência entre o nome da tabela no Access (tblLSA) e o nome da tabela utilizado na Query Select (tbLSA).

Perceba que na tabela do Access, existe um"l" a mais (tblLSA) sendo informado.

Faça apenas a manutenção do nome na tabela do Access, e já irá funcionar.

Abraços e excelente semana pra ti também.


lfrbranca
Colaborador
Colaborador
Mensagens: 26
Registrado em: Qui Jun 09, 2016 10:33 am

Re: ModeloCadastrov3ListView

Mensagem por lfrbranca »

Mikel Silveira Fraga escreveu:
Re: ModeloCadastrov3ListView alterar
Enviado: Qua Jun 22, 2016 10:59 am
por lfrbranca

Boas segui o modelo que me disse mas não consigo da erro.
este é o link se poder dei uma olhada
https://www.dropbox.com/s/v6jje9qpxcymuoy/new.zip?dl=0

Boa semana
LfrBranca, bom dia.

Conforme MP acima, peguei o novo modelo adaptado para o Access e também ocorreu o mesmo erro aqui.

Ao analisar a Query Select que esta sendo usado, vi uma divergência entre o nome da tabela no Access (tblLSA) e o nome da tabela utilizado na Query Select (tbLSA).

Perceba que na tabela do Access, existe um"l" a mais (tblLSA) sendo informado.

Faça apenas a manutenção do nome na tabela do Access, e já irá funcionar.

Abraços e excelente semana pra ti também.
Fiz como disse mas não dá porque da erro na linha abaixo

rstBanco.Open "SELECT ID, FIA,COA,DATA,LSA,NAPMD,CORG,NNA,REF,CATALOGADOR,SIC,LAU,LDU,TRDATA,TRSIC,TRLAU,TRCATALOGADOR, OBS, ESTADO FROM tbLSA", cnnBanco, adOpenKeyset, adLockOptimistic, adCmdText


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

Mensagem por Mikel Silveira Fraga »

LfrBranca, boa tarde.

Este erro esta ocorrendo por um erro de digitação. Nesta Query Select, informada acima, um dos campos que esta sendo referenciado é o TRLAU. No Access, este mesmo campo esta informado como TRSICLAU. Devido essa troca de nomes, no momento em que a rotina executa a Query Select, não consegue localizar o campo referenciado.

Corrija essa informação para que o campo TRLAU seja localizado na consulta.

Teste e retorne qualquer erro.


lfrbranca
Colaborador
Colaborador
Mensagens: 26
Registrado em: Qui Jun 09, 2016 10:33 am

Re: ModeloCadastrov3ListView

Mensagem por lfrbranca »

Mikel Silveira Fraga escreveu:LfrBranca, boa tarde.

Este erro esta ocorrendo por um erro de digitação. Nesta Query Select, informada acima, um dos campos que esta sendo referenciado é o TRLAU. No Access, este mesmo campo esta informado como TRSICLAU. Devido essa troca de nomes, no momento em que a rotina executa a Query Select, não consegue localizar o campo referenciado.

Corrija essa informação para que o campo TRLAU seja localizado na consulta.

Teste e retorne qualquer erro.
Fiz as alterações e continua com o erro na mesma linha


lfrbranca
Colaborador
Colaborador
Mensagens: 26
Registrado em: Qui Jun 09, 2016 10:33 am

Re: ModeloCadastrov3ListView

Mensagem por lfrbranca »

Mikel Silveira Fraga escreveu:LfrBranca, boa tarde.

Este erro esta ocorrendo por um erro de digitação. Nesta Query Select, informada acima, um dos campos que esta sendo referenciado é o TRLAU. No Access, este mesmo campo esta informado como TRSICLAU. Devido essa troca de nomes, no momento em que a rotina executa a Query Select, não consegue localizar o campo referenciado.

Corrija essa informação para que o campo TRLAU seja localizado na consulta.

Teste e retorne qualquer erro.
ja funciona
so mais uma pergunta tenho uma folha de excel com duas colunas com numeros e ja vi varios sites mas não consigo ver nenhuma formula para aplicar para saber quais os numeros repetidos entre as duas colunas

Obrigado e boa semana


lfrbranca
Colaborador
Colaborador
Mensagens: 26
Registrado em: Qui Jun 09, 2016 10:33 am

Re: ModeloCadastrov3ListView

Mensagem por lfrbranca »

Mikel Silveira Fraga escreveu:LfrBranca, boa tarde.

Este erro esta ocorrendo por um erro de digitação. Nesta Query Select, informada acima, um dos campos que esta sendo referenciado é o TRLAU. No Access, este mesmo campo esta informado como TRSICLAU. Devido essa troca de nomes, no momento em que a rotina executa a Query Select, não consegue localizar o campo referenciado.

Corrija essa informação para que o campo TRLAU seja localizado na consulta.

Teste e retorne qualquer erro.
Sempre que coloco um novo registo ou actualizo da o erro abaixo isto porque tanto na txtNAPMD como na txtNNA deverá ser preenchido com um numero neste formato 1111-11-111-1111 ou 5620-MD-256-3521
Sub Alterar_Registro()
' If MsgBox("Confirma a Alteração de dados: " & Me.txtNomeEmpresa & "?", vbYesNo + vbQuestion, "ModeloCadastro") = vbNo Then
' Exit Sub
'End If
' , , , , , , , , ,,
With rstBanco
.Update Array("FIA", "COA", "DATA", "LSA", "NAPMD", "CORG", "NNA", "REF", "CATALOGADOR", "SIC", "LAU", "LDU", "TRDATA", "TRSIC", "TRLAU", "OBS", "ESTADO"), _
Array(txtFIA.Text, txtCOA.Text, txtDATA.Text, txtLSA.Text, txtNAPMD.Text, txtCORG.Text, txtNNA.Text, txtREF.Text, txtCATALOGADOR.Text, txtSIC.Text, txtLAU.Text, txtLDU.Text, txtTRDATA.Text, txtTRSIC.Text, txtTRLAU.Text, txtOBS.Text,
txtESTADO.Text)
End With
rstBanco.Update
'MsgBox "Alterado com sucesso.", vbInformation, "ModeloCadastro"
End Sub

Consegue me dar alguma dica
Obrigado e Bom fim de semana


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