Deletar só objetos por macro

Tenho esta macro de deletar, com a área selecionada…

'' Deletar Oque = Sub DeleteWhat ( xDel$ )
Sub DeleteWhat ( xDel$ )
'------------------------------------------------------------------------------
' Add the letters in the sequence below:
'  "S" = Text
'  "V" = Number
'  "D" = DataTime
'  "F" = Formula
'  "N" = Anotation
'  "T" = Format
'  “A” = All + Object
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags" : args1(0).Value = xDel   
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Delete", "", 0, args1())
End Sub

Mas não deleta somente Objetos, ( botões etc ), alguém conhece este comando ?

Ola @elmau, tem alguma dica…

1 Like

Recomendo altamente o uso do DispatchHelper, caso você não tenha o comando diretamente no API.

Para apagar…

https://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/TrabajandoConCalc/ManipulandoDatos#Borrando_datos

2 Likes

Ops encontrei chutei “O” de object, bem lógico né… e funciona
Deleta botões e imagens…


'' Deletar Oque = Sub DeleteWhat ( xDel$ )
Sub DeleteWhat ( xDel$ )
'------------------------------------------------------------------------------
' Add the letters in the sequence below - - - - - - - -        - - |--- or -- - - - - |
'  "S" = Text
'  "V" = Number
'  "D" = DataTime
'  "F" = Formula
'  "N" = Anotation
'  "T" = Format
'  "O" = Objetos
'  “A” = All + Object
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags" : args1(0).Value = xDel   
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:Delete", "", 0, args1())
End Sub
1 Like

A macro usando essa variação do gravador de macro funciona desde que o Objeto que desejo deletar esteja selecionado. O que não me atende.
.
Não encontrei uma forma de selecionar o objeto que não seja usando o mouse.
.
Contudo, encontrei algo no fórum que funciona melhor para o que eu queria.
.
Postando aqui, com comentários, para fins de registro.
.

''' Deletar botão de pressão
''' Aqui, o controle que quero deletar é um botão, mas funciona com qualquer controle de formulário
Sub DeletarBotao()
Dim oDoc as Object, oSheet as Object, oDrawShape as Object, oShape as Object
Dim i as Long
	'Retonar o doc atual
	If isNull( oDoc ) then oDoc = ThisComponent
	'Retorna a aba desejada
	If isNull ( oSheet ) then oSheet = oDoc.getSheets().getByName("Nome_da_Planilha_Aqui")

	'Retorna a aba informada, propriedades de página de desenho (Formulários/Formas)
	'Para entender: Ferramentas - Formulários - Navegador
	oDrawShape = oSheet.getDrawPage()
	'Retorna os controles de formulário
	'Para entender é necessário inspecionar os objetos (Debug, MsgBox, XRay Tool)
	For i = oDrawShape.Count -1 To 0 Step -1
		oShape = oDrawShape.getByIndex(i)
		'Se objeto encontrado, deletar por:
'		If oShape.Name = "Controle3" then			'Por Nome
'		If oShape.ShapeType = "com.sun.star.drawing.ControlShape" then 'Por Tipo
			oDrawShape.remove( oShape )
		End If
	Next i
End Sub	'DeletarBotao