Caixa de diaologo durante a macro

Bom dia, Novamente preciso de ajuda, he he.

Estou convertendo todas as minhas macros para o Basic puro (acho que é essa a nomenclatura), pois usava partes de códigos do VBA. Daí naõ conseguia colocar senhas nas macros, e com a ultima atualização do Libre, tive que mudar um bocado de coisa. Mas, to usando o seguinte comando para limpar partes da minha planilha:

  sub MAIS
  dim document   as object
  dispatcher as object
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
  end sub

(Antes, com duas linhas eu fazia isso)

Peguei esse comando usando o Gravar macro.

acontece que ao usá-lo ele mostra uma caixa de seleção pedindo para selecionar algumas opções.

Estava usando antes a linha

  dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array()) 

Que não me retorna caixa de diálogos. (e funciona tb muito bem.)

ao invés de

  dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())

Pelo que percebi, a segunda opção é melhor que a primeira, pois ao ClearContents e escrever fórmulas no mesmo local, costuma dar um erro onde a macro escreve a formula mas não retorna o resultado.

Por isso preciso dela mesma.

Então, Como faço pra não aparecer a caixa diálogos? tem jeito?

Muitíssimo Obrigado

Bom dia, você pode utilizar a macro a baixo que limpa o intervalo que você desejar:

Sub limpardados()

ThisComponent.Sheets.GetByName("Plan1").GetCellRangeByName("A1:C50").ClearContents(1)

End Sub

O número do clearcontents mostra que tipo de conteúdo limpar conforme tabela abaixo:
Valor = 1
Data e Hora = 2
Texto = 4
Anotação = 8
Fórmula = 16
Bordas, Formatação Condicional e Formatos = 32

Esses são os principais entre outros, caso deseje apagar varios tipos basta somar os número dos tipos que vc deseja apagar, por exemplo:

Apagar valor e texto = 1 + 4 …ClearContents(5)

Apagar data e hora, texto e fórmulas = 2 + 4 + 16 …ClearContents(22)

Perfeito. Com essa linha de comando vou reduzir minha macro um bocado. Me ajudou demais. Muito Obrigado.

Ola @MarceloCaldas, gosto de reduzir macros também, uma maneira que faço, por exemplo: Coloco esta macro acima como SubMacro de macros maiores.

Sub LimparDados ( xPlan As String, xRange As String, xClear As Integer ) 
ThisComponent.Sheets.GetByName( xPlan ).GetCellRangeByName( xRange ).ClearContents( xClear )
'Limpar VALUE 1; DATATIME 2; STRING 4; ANNOTATION 8; FORMULA 16;	
'HARDATTR 32; STYLES 64; OBJECT 128; EDITATTR 256; FORMATTED 512
'Somar os valores….
End Sub

Para utiliza-la em uma macro maior faço o seguinte comando:

Sub Macro
.
.
Call LimparDados "Plan1", "A1:A5", 5
.
Ens Sub

Desta maneira consegue usar a macro dezenas de vezes apenas com uma linha.

Obs. xRange aceita, Área nomeada, Área por celulas e Célula única.

achei esse complemento ào codigo do Junio Veira:

ThisComponent.Sheets(Conj).GetCellRangeByName(“E2:E20000”).ClearContents(1 OR 2 OR 4 OR 8 OR 16 OR 32 OR 64 OR 128 OR 256 OR 512)

Funcionou que é uma beleza.

Agora, vou adpatar a sua solução tb Gilberto.

Obrigado.

no meu caso, quando vou apagar alguma coisa quero limpar tudo mesmo. uso uma mesma coluna para copiar e colar valores, formulas e tudo o mais.