Pessoal para fechar a planilha via macro sempre utilizei o comando:
ThisComponent.Close(True) false também funciona ou o comando ThisComponent.CurrentController.Frame.Close(True)
porém tanto um quanto o outro fecha, mas apresenta erro e pede para recuperar o arquivo, já testei com dispatcher utilizando Uno:CloseWin, funciona excelente, mas não gostaria de utilizar o dispatcher. Alguém conhece ou forma que não seja o dispatcher e não apresente erro?
Ola @JúnioVieira, tenho esta macro que chamo de SubMacro:
Sub Execute ( oQue$ )
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:" & oQue & "", "", 0, Array())
End Sub
E nas macros utilizo o comando Execute “CloseWin”
E serve para todos os comandos que não necessite de mais parâmetro, exemplo: "Copy", “Paste”, “Cut”, “DataSelect” e já identifique uns 60 comandos.
Desta maneira toda informação da macro Execute não preciso repetir em outros comando…
Não resolve o seu problema, mas para mim facilita a montagem de macros, visto que não sou programador.
Estou aprendendo a programar agora, mas você já tentou executar um comando de salvar, antes de fechar o documento. Do jeito que descreveu é como você apertasse a tecla de atalho para fechar o documento tipo: Alt +F4, sem salvar. Isso deve estar ocasionando um erro grave.
Tenta utilizar algo do tipo:
Sub Sair
ThisComponent.Store()
ThisComponent.CurrentController.Frame.Close(True)
End Sub
E se não der certo de pronto, tenta associar a um evento em algum botão, por exemplo. Espero que ajude.
Mestre, usei sua macro no meu arquivo e ela funciona legal. Porém, o LibO ainda identifica erro de arquivo fechado incorretamente. Saberia informar o que pode estar faltando?
Segue a rotina com alguns acréscimos.
Sub Sair()
REM Salvar antes de fechar
ThisComponent.store()
REM Fechar mue Dialog
frmLogin.EndExecute(1)
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController _
.Frame, ".uno:CloseWin", "", 0, Array())
End Sub
Tente usar a seguinte expressão em um módulo separado dos demais:
Option VBASupport 1' Opção compatibilidade com o VBA
Private Sub FecharSemSalvar
ThisWorkBook.Close SaveChanges:=False 'Fechar o documento sem a informação de salvar antes
Stop ' termina o código
End Sub
.
Olá @Junio
Você já conseguiu resolver este problema?
Por acaso você utiliza algum formulário (Caixas de Diálogo) no seu código de MACRO?
Eu estava com um problema semelhante, e consegui resolvê-lo apenas inserindo um comando form.Dispose
no final da leitura dos campos do formulário. Ou seja, antes de fechar o documento [ ThisComponent.Close(False)
]
Se essas informações não forem suficientes, não se acanhe em perguntar.