@lucasalves
Segue procedimento alterado conforme pediu. Marque como Reposta correta para ajudar outros que procurarem o mesmo tipo de conteúdo.
Atualizado em 19/03/2020
Sub CopySheet
Dim oCurrentController As Object
Dim oActiveSheet As Object
Dim oSheets As Object
Dim sText as String
oCurrentController = ThisComponent.getCurrentController()
oActiveSheet = oCurrentController.getActiveSheet()
oSheets = ThisComponent.getSheets()
sText = InputBox("Please enter a phrase:", "Dear User")
If sText = "" Then
Exit Sub
End if
If MsgBox("A planilha," & Chr(10) & Chr(10) & "'" & sText & "'" & Chr(10) & Chr(10) & "será criada. Continuar?", 1 + 32, "Confirmar Nome!") = 2 then
Exit Sub
End If
If oSheets.hasByName( sText) Then 'oActiveSheet.Name
MsgBox ("Nome de Planilha," & Chr(10) & Chr(10) & "'" & oActiveSheet.Name & "'" & Chr(10) & Chr(10)& "já existente." & Chr(10) & Chr(10) & "Escolha outro nome.", 45, "Cópia não realizada!")
Else
oSheets.copyByName(oActiveSheet.Name, sText, oSheets.Count + 1)
End If
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
End Sub
Copie e cole este procedimento como uma nova macro, e associe ela ao seu botão de comando.
Criado em 18/03/2020
Sub CopySheet
Dim oCurrentController As Object
Dim oActiveSheet As Object
Dim oSheets As Object
Dim sText as String
oCurrentController = ThisComponent.getCurrentController()
oActiveSheet = oCurrentController.getActiveSheet()
oSheets = ThisComponent.getSheets()
sText = InputBox("Please enter a phrase:", "Dear User")
If MsgBox("A planilha," & Chr(10) & Chr(10) & "'" & sText & "'" & Chr(10) & Chr(10) & "será criada. Continuar?", 1 + 32, "Confirmar Nome!") = 2 then
Exit Sub
End If
If oSheets.hasByName( sText) Then
MsgBox ("Nome de Planilha," & Chr(10) & Chr(10) & "'" & oActiveSheet.Name & "'" & Chr(10) & Chr(10)& "já existente." & Chr(10) & Chr(10) & "Escolha outro nome.", 45, "Cópia não realizada!")
Else
oSheets.copyByName(oActiveSheet.Name, sText, oActiveSheet.RangeAddress.Sheet + 1)
End If
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
End Sub
- sText = vai armazenar o nome da aba que deseja colocar mencionado no ImputBox.
- MsgBox1 = Vai questionar se deseja seguir com o nome mencionado. Caso "Cancela", ele finaliza o procedimento sem alteração em sua planilha.
- MsgBox2 = Informa se o nome mencionado já é utilizado em seu arquivo. Se sim, ele finaliza o procedimento sem alteração em sua planilha.
- Se tudo estiver conforme, ele adiciona uma cópia da planilha ativa, na sequência da mesma, com o nome colocado no ImputBox.
- Por fim, salva o arquivo.
Caso precise que a nova aba seja limpa de certas informações, utilize o comando:
ThisComponent.Sheets.getbyName(sText).getCellRangebyName("A1:B2").ClearContents(7)
OBS.: Lembrando que: "A1:B2" será a range que precisa ser limpa. Altere e coloque quantas linhas dessas for necessário para seu uso.
@lucasalves seja bem vindo. Como você inicia essa macro? Através de um acionamento de botão individual? ou através de um MsgBox?
@lucasalves, se puder postar um modelo deste arquivo, fica mais fácil a analise.
Se SIM, use Editar sua pergunta e com o ícone Clipe anexe o arquivo.
É através de um botão individual. Anexei o arquivos pra vocês olharem, por gentileza.
@lucasalves, esta Macro só esta Renomeando, e se clico em Cancelar não Renomeia, Cancela.
Só para entender: A finalidade e arquivar os Formulários preenchidos ?
Não, a finalidade é que ao clicar no botão Nova Adição, seja criado uma cópia da primeira aba (que no caso é a aba chamada 1ª Adição) logo após ela. Simultaneamente ao clicar no botão Nova Adição, que além de realizar essa cópia, automaticamente abriria também o campo para renomear aba de cópia, pois, o usuário dará sequência as adições posteriores, ou seja, (2ª Adição e depois 3ª Adição e assim sucessivamente), porém, se o usuário desistir de criar uma nova adição e clicar em cancelar, quero que seja excluído a aba que supostamente seria criada posteriormente. Então, resumindo, o botão Nova Adição fará duas ações: Criar uma cópia da aba anterior e abrir a janela para renomear a aba, mas, se o usuário não quiser clicar em OK para finalizar (supondo que o usuário tenha desistido da adição) e clicasse em cancelar, não seria criado uma cópia, somente cancelaria ...(mais)
Esta parte de Criar e Renomear esta Ok.
Mas depois que Renomeou é Preenchido e impresso, e fica gravado no arquivo é isso ?
Se SIM não é necessário manter o Formulário arquivado, só os Dados, e uma tela de Consulta.
Exatamente, seria excelente uma tela de consulta, porém, sempre que é feito uma adição, o formulário é impresso e enviado ao setor de produção para dar sequencia, ai após os exames, voltam a verificar se precisa de nova adição. E assim vai até o final da produção.
Ola @lucasalves, posso ajuda-lo a melhorar o controle, entre em contato direto, veja aqui:
https://wiki.documentfoundation.org/U...
Vou precisar de mais detalhes de como é usado o formulário.