Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por Bautto
Posts
#51281
Colegas do Guru, boa tarde.
Assisti a um vídeo do Laennder sobre VBA, onde ensina a montar a planilha anexa, com a rotina em VBA para registrar LOGs de atividades.
Acompanhei e fiz todos os procedimentos conforme indicado, porém estou recebendo a mensagem de erro "subscrito fora do intervalo" na linha "Set lo = shtLOG.ListObjects("tbLOG")", que se refere ao local onde será inserida a informação, uma tabela criada na planilha shtLOG.
Não consegui solucionar, mesmo após pesquisar nas comunidades.
Alguém pode me esclarecer a razão do erro e como corrigí-lo?
Agradeço qualquer ajuda.
Você não está autorizado a ver ou baixar esse anexo.
Por osvaldomp
#51289
Substitua a linha em que está ocorrendo o erro por essa abaixo.
Código: Selecionar todos
Set lo = shtLOG.ListObjects("Tabela1") 
Corrija também a linha abaixo: substitua Acao por Ação, conforme a parte em vermelho.
.Range(lo.ListColumns("Ação").Index) = Acao

Se o seu objetivo for elaborar o histórico das alterações efetuadas nas planilhas então é conveniente ocultar a planilha shtLOG via macro e proteger manualmente o Projeto VBA, pois se não o fizer, o histórico poderá ser facilmente manipulado ou involuntariamente alterado e aí perderá a veracidade.

Se houver interesse, é possível rastrear e gravar na planilha shtLOG qual célula de qual planilha foi alterada, bem como conteúdo anterior e novo conteúdo, entre outros, utilizando para isso um único código VBA beeeeeem mais simples do que esses que você está tentando utilizar.
Por Bautto
Posts
#51298
Boa tarde, Osvaldomp.
Agradeço muito sua informação. Com as alterações que você indicou, a funcionou rotina funcionou.
Me desculpe, mas poderia me esclarecer sobre isso, uma vez que o que fiz está totalmente de acordo com o que o autor fez e orientou fazer no vídeo, tal como nomear a tabela como "tbLOG"?
Pode ser alguma diferença entre as versões do Excel?
Quanto ao seu comentário, como esta planilha tem a finalidade apenas de "testar" a rotina, não fiz as proteções que normalmente faço em operação de rotina.
Sobre o rastreio e gravação de dados, gostaria sim de conhecer o código a que você se referiu.
Mais uma vez, agradeço seu interesse e ajuda.
Abçs.
Por osvaldomp
#51299
O erro ocorre porque não existe na sua planilha um ListObject com o nome de tbLOG. O único ListObject existente tem o nome de Tabela1. Rode o código abaixo e você poderá confirmar.
Código: Selecionar todos
Sub teste()
 Dim lo As ListObject
  For Each lo In ActiveSheet.ListObjects
   MsgBox lo.Name
  Next lo
End Sub
Quanto à outra solução que comentei antes, para testar, em um arquivo vazio multi planilhas nomeie uma delas como Log e instale o código abaixo no módulo de EstaPastaDeTrabalho .
Lembrando que para não permitir o livre acesso à planilha Log é necessário ocultá-la via VBA (VeryHidden) e também proteger o Projeto VBA.
Código: Selecionar todos
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Dim LR As Long
  If Sh.Name = "Log" Then Exit Sub
  Application.EnableEvents = False
   With Sheets("Log")
    LR = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A" & LR + 1).Value = Format(Now, "dd-mm-yy hh:mm:ss")
    .Range("B" & LR + 1).Value = Sh.Name
    .Range("C" & LR + 1).Value = Target.Address(False, False)
    .Range("D" & LR + 1).Value = Target.Value
    .Range("E" & LR + 1).Value = Environ("USERNAME")
    .Range("F" & LR + 1) = Environ$("computername")
   End With
  Application.EnableEvents = True
End Sub
Outras informações podem ser acrescentadas à planilha Log, conforme abaixo:
Código: Selecionar todos
Application.UserName  ' usuário do Excel
Hex(CreateObject("Scripting.FileSystemObject").GetDrive("C:\").SerialNumber) 'número do HD
Por Bautto
Posts
#51302
Osvaldo, boa noite.
Agradeço novamente sua disposição em esclarecer-me, e o código que realmente é bem mais simples e eficiente.
Não querendo abusar de sua boa vontade, peço se puder esclarecer-me quanto à nominação de tabelas, pois, conforme acompanhei no vídeo, foi dado o nome de "tbLOG", selecionando o cabeçalho e a primeira linha vazia, e este nome aparece na lista de nomes, no gerenciador de nomes da aba "Fórmulas".
Ao acessar a caixa de nomes, também está lá o "tbLOG".
Pergunto isto pois, ao criar uma nova tabela, apenas nos é solicitado informar o intervalo e se tem cabeçalho e ao dar o "ok", é atribuída a nomenclatura sequencial "Tabela1", "Tabela2"... É possível alterar essa nomenclatura para utilização em ListObjects?
Desculpe se estou tomando muito seu tempo e paciência.
Boa noite e bom Natal.
Abçs.
Por osvaldomp
#51304
Sim, é possível renomear a Tabela.

Quanto ao nome tbLOG provocar erro eu sugiro que você verifique novamente o vídeo para confirmar se tudo que está feito no seu arquivo e nos códigos que você instalou está em conformidade com as instruções e se persistir a dúvida passe uma mensagem ao autor do vídeo relatando o problema.
No local do vídeo não há um arquivo de exemplo para ser baixado ? Assim você poderia confrontar com o seu.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord