Ir ao conteúdo

Posts recomendados

Postado

Boa tarde caros!!!

Estou com um pequeno problema, trabalho com o Calc da LibreOffice, tenho uma macro e preciso que ela seja executada assim que eu abrir o arquivo, porém isso deve acontecer apenas na primeira vez que eu abrir esse arquivo e só... as próximas vezes que o arquivo for aberto não deve acontecer nada... fazer ela ser executada ao abrir o arquivo eu consegui, mas isso acontece todas as vezes que eu abro o arquivo. Como eu posso fazer isso?

 

Grato pela atenção

Postado

Só vou dar a sugestão, como fazer infelizmente não sei.

 

Coloque uma variável que deva ser preenchida a primeira vez, por exemplo se nome em branco, a macro pergunta qual seu nome ao ser preenchida ela guardara esta informação em algum lugar na planilha, e na próxima vez que abrir ao checar que existe a informação já preenchida a macro salta para o final.

  • 3 semanas depois...
Postado

Bom dia,

 

Pensei numa solução um pouquinho diferente da de @g.schiavinatto. A macro será executada apenas se determinado valor estiver na célula (no caso o valor 1). Assim, se a célula estiver vazia ou com outro valor, a macro não rodará.

 

Então, você deverá modificar sua macro para ter a seguinte estrutura:

 

Sub Macro_Executar_AoAbrir()
	' Começar com um teste para ver se a macro
	' já foi executada. A função "Ja_Executou"
	' se encarrega de fazer a verificação.
	' Ao retornar "True" a macro é encerrada aqui
	If Ja_Executou Then Exit Sub


	' Seu código normal


	' Chamar a rotina que marcará a macro como
	' excecutada, ou melhor, apagará o valor
	' da célula A1048576
	Call Marcar_como_Executada
End Sub

 

A seguir estão a função "Ja_Executou" e a rotina "Marcar_como_Executada":

 

Function Ja_Executou As Boolean
    ' Planilha que está no momento na primeira posição
	oPlan = ThisComponent.Sheets.getByIndex( 0 )
    ' Última célula da coluna A: A1048576
	oCel = oPlan.getCellByPosition( 0,1048575 )
		
	' Se o valor de A1048576 for zero a macro já foi executada
	If oCel.Value = 0 Then
		Ja_Executou = 1
	Else
		Ja_Executou = 0
	End If
End Function


Sub Marcar_como_Executada
    ' Planilha que está no momento na primeira posição
	oPlan = ThisComponent.Sheets.getByIndex( 0 )
    ' Última célula da coluna A: A1048576
	oCel = oPlan.getCellByPosition( 0,1048575 )
	
	' Apagar os valores de A1048576
	oCel.ClearContents( 1 ) 	
End Sub

 

E para não ter que colocar o valor 1 na célula A1048576 manualmente, rode a macro:

 

Sub Definir_Executar
    ' Planilha que está no momento na primeira posição
	oPlan = ThisComponent.Sheets.getByIndex( 0 )
    ' Última célula da coluna A: A1048576
	oCel = oPlan.getCellByPosition( 0,1048575 )
	
	oCel.Value = 1
End Sub

[]s.

TianK

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!