Ir ao conteúdo

Posts recomendados

Postado

Boa noite, pessoal.

 

Tenho uma planilha que tem que ser visualizada diariamente por outros setores, como posso criar uma macro que ao abrir, salvar o usuário e data/hora que foi aberto?

 

Obrigado

Postado

Cole esse codigo em esta pasta de trabalho

 

Private Sub Workbook_Open()
Dim WR As Worksheet
Dim Ulinha As Long

'Crie uma Aba com o nome Registro

Set WR = Sheets("Registro")

'Oculta a planilha registro (nem aparece o menu ocultar do botao direito)
      WR.Visible = xlSheetVeryHidden

Ulinha = Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row

'Registra usuario

WR.Cells(Ulinha, 1).Value = Environ("username")

'Registra data
WR.Cells(Ulinha, 2).Value = Date 'Se quiser data e hora na mesma celula troque por now

'Registra hora
WR.Cells(Ulinha, 3).Value = Time


End Sub

  • Curtir 1
Postado

Tem dois caminhos escreve um codigo que exibe a aba novamente onde é so alterar xlsheetveryhidden para xlsheetvisible

 

Ou quando for necessario, embora mais trabahoso, mais seguro, entra no editor vba e exibe manualmente, alterando a mesma propriedade. 

  • Curtir 1
Postado

Curiosamente estava registrando na linha 279 pra baixo, de uma olhada no seu original.

 

Fiz um ajuste ja que você decidiu ter data e hora na mesma celula.

Apaguei a linha que oculta a planilha, (Pessoalmente acho que ela deve ficar oculta, os usuarios nao deveriam saber da sua existencia.), é preferivel ter um pouco de trabalho para exibir ou criar uma macro com um atalho pra exibir a planilha quando necessario, ate porque se isso ficar visivel acho eu que perde seu prorposito, mas enfim isso é com você.

 

Agora esta registrando a partir da linha 2

 

Veja

Relatório de Resultados - Pão.xlsm

  • Curtir 1
Postado

Consegui resolver:

 

Private Sub Workbook_Open()

Application.ScreenUpdating = False

    Sheets("Registro").Visible = True

    Sheets("Registro").Select

    Rows("4:4").Select

    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    Range("A1:C1").Select

    Selection.Copy

    Range("A4").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Range("B4").Select

    Application.CutCopyMode = False

    Selection.NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"

    Range("C4").Select

    Selection.NumberFormat = "[$-F400]h:mm:ss AM/PM"

    Range("A4").Value = Environ("username")

    Sheets("Registro").Select

    ActiveWindow.SelectedSheets.Visible = False

    ActiveWorkbook.Save

       

End Sub

Postado

Pra efeito de Didatica

 

Pode ser feito assim

 

Private Sub Workbook_Open()
Dim WR As Worksheet
Dim Ulinha As Long

'Crie uma Aba com o nome Registro

Set WR = Sheets("Registro")

'Exibe a planilha registro
WR.Visible = xlSheetVisible

Ulinha = WR.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row

'Registra usuario

WR.Cells(Ulinha, 1).Value = Environ("Username")

'Registra data e Hora
WR.Cells(Ulinha, 2).Value = Now

'Oculta a Planilha (Como disse nem aparece o menu do botao direito)

WR.Visible = xlSheetVeryHidden

WR.Save

End Sub

 

  • Curtir 1
Postado

Boa noite @diego_janjao,

 

O código pode ser otimizado:

 

Private Sub Workbook_Open()

Dim WR As Worksheet
Dim Ulinha As Long
Set WR = Sheets("Registro")
    
Ulinha = Sheets("Registro").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row

WR.Cells(Ulinha, 1).Value = Environ("username")
WR.Cells(Ulinha, 2).Value = Now
WR.Cells(Ulinha, 3).Value = Time

End Sub

Na verdade o registro estava iniciando na linha 279 por que no código disponibilizado pelo colega não é especificado a planilha na qual se quer a última linha preenchida, sendo assim, o excel entende que é a planilha ativa :D

 

Sua planilha pode continuar oculta, o código registrará normalmente, e quando você estiver a fim de verificar poderá desocultar a planilha manualmente e proteger seus dados.

 

 

Atenciosamente,

 

 

Postado

 

Na verdade o objetivo era explicar o motivo pelo qual estava dando erro na primeira vez. Desculpa não havia visualizado seu último post. Seguem algumas melhorias:

 

Não é necessário tornar visível a planilha para que as informações sejam salvas.

Outra melhoria é adicionar o With WR/End With

 

Ótima observação sobre o:

 

WR.Save

 

Caso alguém entre somente para visualizar e acabe não editando nada.

 

 

Desculpe qualquer coisa.

Att.

Private Sub Workbook_Open()

Dim WR As Worksheet
Dim Ulinha As Long
Set WR = Sheets("Registro")
    
Ulinha = WR.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row

With WR
.Cells(Ulinha, 1).Value = Environ("username")
.Cells(Ulinha, 2).Value = Date
.Cells(Ulinha, 3).Value = Time
End With

WR.Save
End Sub

 

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!