Salvar e Fechar arquivo Calc após tempo determinado, automáticamente.

Estou com problema enorme, desenvolvi Formulário Médico de Pacientes, que podem ser abertos em diversos setores da Clinica. O Problema é que abrem o arquivo para atualização e não fecham e nem saem, para liberar para o próximo setor.

Minha pergunta: é possível ter um temporizador no arquivo, que após Tempo determinado é salvo e fechado ?

Obs,: Nele há diversas Macros para navegação.

Não sei se já resolveu a questão, mas não seria interessante criar um botão para apenas sair?

Ou seja, uma macro que apenas salva, e depois fecha o arquivo.

Assim teria como colocar uma orientação rápida para o usuário, do tipo, “após utilizar aperte sair”.

Tentou Ferramentas - Compartilhar planilha ?

Mas neste caso onde várias pessoas editam o mesmo arquivo, o Collabora Online vai resolver. Entretanto, é uma solução em outro patamar de serviços.

Segue sugestão.

'------------------------------------------------------------------
' Vincular a macro a algum evento do documento ou planilha
' Aqui está vinculada ao Evento 'Ao salvar documento'
'------------------------------------------------------------------
Sub Temporizador( pEvent )
rem Define constantes
Const ColB = 1

rem Define variáveis
Dim oSheet As Object, oCel As Object
Dim dStartTime As Date, dEndTime As Date
Dim iTime As Integer, ElapsedTime As Integer
Dim lmiliTime As Long, lSpan As Long

On Error GoTo SAIR
	
	rem Obtem a planilha ativa
	oSheet = ThisComponent.CurrentController.getActiveSheet()
	rem Obtem a célula onde está o tempo em minutos
	oCel = oSheet.getCellByPosition(ColB, 0)
	rem Formata a célula para retornar números inteiros
	oCel.NumberFormat = 1
	rem Obtem o valor preenchido na célula
	iTime = oCel.Value
	
	rem Permite o usuário escolher quanto tempo
	rem  iTime = Trim( InputBox("Tempo até fechar em minutos", "Tempo de uso", "3") )
	
	rem Duração deve ser em milisegundos ( 1s = 1000ms / 1min = 60000ms )
	lmiliTime = 1000
	rem Converte o tempo obtido na célula de minutos para milisegundos
	lSpan = iTime * lmiliTime
	
	rem Obtem o tempo inicial e o final usando a Função Timer
	dStartTime = Timer
	Wait ( lSpan )
	dEndTime = Timer
	
	rem Retorna o tempo decorrido
	ElapsedTime = dEndTime - dStartTime
	
	rem Se tempo decorrido for igual ao indicado pelo usuário, salvar e fechar
	rem Se não, sair
	If ElapsedTime = iTime And oCel.String <> "" Then
		ThisComponent.store()
		ThisComponent.close(true)
	Else
		Exit Sub
	End If
SAIR:
	0
End Sub

AskTemporizador.ods (13,7,KB)

Obs.: As variáveis dStartTime e dEndTime estão declaradas como do tipo Date, porém, também podem ser declaradas como outros tipos númericos, como, por exemplo, Single.

1 Like