Notifications
Clear all

Planilha de log e problema no código

11 Posts
2 Usuários
0 Reactions
1,334 Visualizações
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Olá, pessoal,

Estou com um problema em adaptar uma planilha que faz o registro de alterações para a minha planilha.

A planilha de log eu peguei do fórum Tomás Vásquez

http://www.tomasvasquez.com.br/forum/vi ... anda#p4375

Bem, vamos por partes:

1. Minha planilha já tem alguns códigos, então tive que juntar com os códigos da planilha de log.

2. Para juntar, copiei o formulário "Logs" inteiro. Copiei os módulos "Criptografia" e "Mdl1" inteiros. Copiei os códigos de eventos para planilha e pasta de trabalho, e coloquei junto com o meu código, cada qual, na sua seção correnpondente. Não deixei nada sem copiar.

3. O fato é, quando eu abro o formulário "Logs" na planilha original, tudo funciona. Quando eu tento abrir o formulário na minha planilha, aparece a mensagem de erro:

"O tipo definido pelo usuário não foi definido"

E aponta para o código:

Private Sub ListView1_ItemDblClick(ByVal Item As MSComctlLib.ListItem)
With Item
MsgBox "ABA: " & .Text & Chr(13) & _
"Célula: " & .SubItems(1) & Chr(13) & Chr(13) & _
"Vr.Anterior: " & .SubItems(2) & Chr(13) & Chr(13) & _
"Vr.Atual: " & .SubItems(3), vbInformation, "Log"
End With
End Sub

Destacando a primeira linha:

Private Sub ListView1_ItemDblClick(ByVal Item As MSComctlLib.ListItem)

Não Sei como resolver isso, aliás, não entendi porque acontece o erro.

O que gostaria, são 2 coisas:

a) Resolver os erros para o formulário ser aberto.

b) Somente registrar o log de alterações se outra pessoa que não seja eu estiver usando a planilha (para essa parte eu ja tenho o código em Estapasta_de_Trabalho), que identifica o usuário pelo HD. Eu só não sei quais comandos eu devo colocar nessa seção para registrar o log somente quando que usa a planilha não sou eu.)

Obrigado, pessoal.

PS: Não fiz a pergunta lá porque os mesmos membros (Edson e Mauro) que contribuem lá também participam aqui, e achei desnecessário criar uma conta lá somente para isso.

 
Postado : 10/02/2014 7:51 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

gtsalikis, não sei o porque mas aqui pede Senha para visualizar as Referencias no Editor do VBA, mas pelo que expôs acredito que você tem de Hailitar a Referencia ao Controle ListView, veja no link abaixo como faze-lo:

Habilitar o Controle ListView
http://www.tomasvasquez.com.br/forum/vi ... vl5q2JdXQQ

Outra obs, como disse que copiou de um modelo para outro, verifique tambem os nomes dos Controles.

[]s

 
Postado : 10/02/2014 8:20 pm
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Olá, Mauro,

Primeiro, desculpe pela senha. Eu tinha retirado a senha porque estava atualizando o código, mas, por alguma razão, ela ficou ali. A senha é Makoto

Do formulário, a tua dica resolveu, consegui abrir normalmente. Porém, ainda estou com a outra pendência – fazer o registro de alterações somente se o usuário da planilha não for eu.

A parte de registrar as alterações de outros eu já fiz e está correta (foi só colocar um IF nos eventos da planilha BQMC, que puxa o número do HD dos 2 computadores que utilizo).

Agora, o que não consegui resolver:

Toda vez que a planilha é aberta, é criado um novo arquivo txt de log. Porém, eu queria que o arquivo somente fosse criado se outra pessoa que seja eu abra a planilha. (Essa condição já está em Estapasta_de_Trabalho, porém, não sei como adaptar o código do log para que isso aconteça).

Pode me ajudar?

 
Postado : 11/02/2014 6:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

gtsalikis, quando vi sua mensagem ontem não prestei atenção que tinha mais uma duvida ao final, e hoje no serviço estão fuçando na Rede estava quase impossivel se conectar.

Mas vamos a questão, a qual eu fiquei em duvida, primeiro você diz :
"fazer o registro de alterações somente se o usuário da planilha não for eu"

depois :
"Porém, eu queria que o arquivo somente fosse criado se outra pessoa que seja eu abra a planilha."

Se a intensão é não criar o arquivo de Log e consequentemente não registrar as alterações se o Usuário for VOCÊ, é só inserir a condição IF antes da linha que criará o arquivo:
Como não citou por qual CRITERIO quer fazer a comparação, estou supondo que será pelo UserName, mas se for por outro, é só ajustar a instrução.

Então antes da linha que criará o arquivo de Log, coloque a condição:
'Nesta instrução estou supondo que fará a verificação pelo
'UserName, se for isto tem de ajustar o nome do usuário nesta linha

If UserName = "gtsalikis" Then GoTo Fim
'Check type of file in the folder and open file.

Como usamos o GoTo Fim, esta instrução nos levará direto para onde a ancoragem for colocada, ou seja pulando e ignorando as linhas seguintes que antecedem a inserção do ponto a continuar, desta forma como queremos ignorar a criação do arquivo e registro do Log, fazemos da seguinte forma:
'Nesta instrução estou supondo que fará a veerificação pelo
'UserName, se for isto tem de ajustar o nome do usuário nesta linha
If UserName = "gtsalikis" Then GoTo Fim

'Check type of file in the folder and open file.
For Each objFile In objFolder.Files
If objFile.Name Like "Log*.txt" Then
strName = objFile.Name
contador = contador + 1
End If
Next 'objFile

QtdArq1 = contador

Arquivo1 = ActiveWorkbook.Path & "Log" & QtdArq1 + 1 & ".txt"

Open Arquivo1 For Output As #1
Write #1, Encripta(Comp_Name), Encripta(UserName), Encripta(Now)
Close #1

Fim:

Satisfeita a Condição do UserName, a rotina continuará após a linha Fim:

Se quiser pular as Condições "If NúmeroHD", tem de colocar o Fim: apos o Ultimo End IF.

Espero que saja isto.

[]s

 
Postado : 11/02/2014 5:41 pm
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Mauro, desculpe pela confusão.

Era isso mesmo, mas com o detalhe que o critério será pelo número do HD.

O estranho é que eu tinha feito exatamente a mesma coisa que vc me disse pra fazer, e não deu certo. Agora, depois de ler tudo, eu fiz novamente (copiando exatamente as mesmas linhas para dentro do IF, e funcionou.

Estranho, mas, problema resolvido.

Muito obrigado.

 
Postado : 11/02/2014 5:51 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

A pedido por MP Topico desbloqueado

 
Postado : 27/03/2014 5:07 pm
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Obrigado, Mauro.

Meu problema com a planilha ainda está na hora de carregar o formulário para exibir o registro das alterações. - Formulário Logs.

O que acontece é eu configurei, com a ajuda do Mauro (acima), para que só seja feito o registro de alterações quando outra pessoa que não eu abra o arquivo, assim eu saberei quando alteraram coisas que somente eu devo controlar. Tudo funciona perfeitamente. Testei e retestei.

Porém, eu uso acesso o formulario com o registro de informações poucas vezes, porque são poucas as vezes em que alguém mexe na minha planilha. (Quando isso acontece, tenho um código que me avisa que houve alterações, e quem alterou).

Nesse momento é quando eu mando abrir o formulário Logs, e dá o segunte erro:

Erro em tempo de execução '424':

O objeto é obrigatório

O problema é que "não tem erro algum". O que eu faço, nessas horas é apagar o formulário, abrir outro arquivo de backup, e copiar o formulário novamente.

Volta a funcionar. Eu salvo o arquivo, fecho, e, quando preciso ver o log, volta o mesmo erro.

Está muito chato ter que ficar apagando e reinserindo o formulário toda vez que eu preciso ver um log.

Alguém saberia me dizer porque isto está acontecendo?

Segue o link para o arquivo (senha do VBA Makoto):

http://www.sendspace.com/file/buxobh

 
Postado : 28/03/2014 6:41 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

gtsalikis, baixei seu modelo, mas não vi nenhum botão para chamar a rotina que exibe o formulário, então ao acessar o formulário "Logs" pelo editor do VBA, vi que ele estava sem o Controle "ListView1" isto é um problema com o excel, dependendo das versões não sei porque o ListView somem.

Deixando de lado isto, adicionei o ListView, salvei o arquivo e por diversas vezes abri e não obtive mais a mensagem de erro, ajustei alumas rotinas para poder salvar o arquivo de log devido as varias restrições que colocou pelo numero do HD e tambem funcionou.

Fica meio dificil dizer exatamente onde tenha algum erro.
Quando você reabre o arquivo, antes de executar qualquer rotina, ja olhou antes se o controle Listiview está no formulário ?

[]s

 
Postado : 28/03/2014 4:54 pm
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Mauro, desculpas novamente,

Na correria, esqueci de retirar restrição pelo número do HD, e esqueci de dizer que uso a célula A1 como "botão" para chamar o Logs.

Fiz como vc disse, e inseri novamente o listview, e funcionou. Já que não dá pra saber porque o Excel às vezes "apaga" o listview, e considerando que são diversos computadores que acessam a planilha, algum deles deve ter feito isso.

Pelo menos é mais fácil reinserir o listview quando eu precisar.

Obrigado, amigo.

 
Postado : 28/03/2014 5:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

gtsalikis, isso é mesmo devido a diferenças nas versões ou Bibliotecas que se referem a este controle, certa vez conversando com Bernardo que estava com o mesmo problema e postou que conseguiu resolver utilizando um path para atualizar as bibliotecas, logicamente teria de fazer isto em todos os PCs, não sei se você poderá fazer isto se for em uma empresa que tenha gerenciamento e proibe tais alterações, mas vale a pena verificar.
Vou ver se acho o tópico e depois indico.

Editando:
A duvida é diferente mas o Path é o mesmo, na época que ele me indicou, cheguei a rodar este path em meu NB que acontecia o mesmo problema do listview e não tive mais problemas.
viewtopic.php?f=5&t=10880&p=57335#p57335

[]s

 
Postado : 28/03/2014 5:20 pm
(@gtsalikis)
Posts: 2373
Noble Member
Topic starter
 

Obrigado pela informação, mas, não poderei alterar os pcs.

Infelizmente, se até para ligar o cabo de força na tomada nós temos que chamar a equipe do TI, imagina pra instalar um path no Office...

Eu ainda consigo fazer minhas "firulas" usando o portable virtualbox, mas só assim.

Abraço

 
Postado : 28/03/2014 5:26 pm