Macro para Proteger planilha... sem senha

Olá!

Gostaria de gravar uma macro para proteger minha planilha sem senha.

Até consigo gravar e salvar o código dessa macro.

Acontece que, ao executar o código, só aparece a caixa de mensagem Proteger planilha, mas não completa a ação…

sub Proteger_sem_senha
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Protect"
args1(0).Value = true

dispatcher.executeDispatch(document, ".uno:Protect", "", 0, args1())

end sub

Seguem imagens do código gravado pela macro e da mensagem Proteger planilha:

[Código macro] http://imgur.com/u9cvVwD

[Proteger planilha] http://imgur.com/d317l8M

Grato pela atenção!

Orlando Souza

As imagens somente são aceitas no Ask quando o usuário alcança um certo karma (pontuação). Então, você poderia editar sua pergunta e fornecer mais detalhes do seu projeto?

Você também pode colocar o código da sua macro na sua pergunta, selecionar ele e clicar no botão “10010010” que vai formatar o código direitinho. Experimente. Não precisa da imagem 1.

Este parece um daqueles casos em que uma das limitações do Gravador de Macro (experimental) do LibreOffice impede que se chegue ao resultado esperado.

Pesquisando na internet também não encontrei referências sobre como proteger/desproteger diretamente pelo Dispatcher sem abrir o dialogo “Proteger planilha…”

Mas felizmente a API UNO do LibreOffice oferece dois métodos bem simples para se alcançar o seu objetivo.


Cole as macros abaixo na IDE Basic do seu arquivo e substitua as ocorrências de "**Planilha1**" pelo nome da sua planilha:
' Macro para proteger a Planilha
Sub ProtegerPlan
Dim oDoc As Object, oPlan As Object

	oDoc = ThisComponent
	oPlan = oDoc.Sheets.getByName( "Planilha1" )
	
	' Proteger a planilha sem senha
	oPlan.Protect( "" )
End Sub

' Macro para Desproteger a planilha
Sub DesprotegerPlan
Dim oDoc As Object, oPlan As Object

	oDoc = ThisComponent
	oPlan = oDoc.Sheets.getByName( "Planilha1" )
	
	' Deproteger a planilha sem senha
	oPlan.Unprotect( "" )
End Sub

Atte,
Grafeno

\o/

obrigado, Grafeno!!

Funcionou direitinho

abçs.

Orlando

:smiley:

Muito bom,@Orlando! Muito obrigado pelo retorno (feedback). Mas vc poderia clicar no " √ " da resposta para marcar como “resposta correta” para facilitar para quem estiver procurando algo parecido. Abrs.

Olá, Grafeno! Poderia dar uma olhada no tópico que segue? A dúvida é quase a mesma que você apresentou solução, mas existe a necessidade de proteger sem permitir “Selecionar células protegidas”.

Grato.

Não estou encontrando na internet um método do API UNO do LibreOffice parecido com o dispatcher.executeDispatch(document, ".uno:ToolProtectionDocument", "", 0, args1()), sem abrir o dialogo “Proteger estrutura da planilha…” (senha em branco)

**Ola @Orlando, abra outra pergunta, esta já esta “Resolvida”.

Fica difícil no futuro fazer pesquisa com assuntos NOVOS em Comentários.

Oi, @schiavinatto

Já encontrei a linha de comando:

ThisComponent.protect("") 'Proteger estrutura da planilha sem senha

Obrigado!