Macro para inserir planilha do arquivo

Olá, comunidade!

Sou novo na elaboração de macros e estou tentando automatizar a importação de dados de um arquivo para uma planilha (semelhante ao recurso inserir planilha do arquivo).

A ideia é a seguinte: tenho o arquivo A.xlsx que possui 3 planilhas (Planilha1, Planilha2, Planilha3). A Planilha1 está em branco e as demais contém dados.

Gostaria de fazer uma macro com botão na Planilha1 (em branco) que:

  1. Abra uma janela do explorador de arquivos para a seleção de um outro arquivo (B.xlsx) que contém apenas 1 planilha (Planilha1);

  2. Uma vez selecionado o arquivo B.xlsx, que o seu conteúdo seja inserido na Planilha1 (planilha em branco) do arquivo A.xlsx;

  3. A Planilha1 do arquivo A.xlsx seja renomeada para Planilha-Final;

  4. As alterações efetuadas no arquivo A.xlsx sejam salvas.

Na documentação do LO encontrei informações que permitem selecionar o arquivo, abri-lo e renomear a Planilha1, porém, a planilha é aberta separadamente e o que desejo é inserir o arquivo na planilha que já se encontra aberta.

Grato pela ajuda.

Ola @tiuzao , dica importante, se fizer macros no arquivo A.xlsx e salvar em formato Excel, a macro é perdida, então trabalhe com o arquivo nativo do LibreOffice (.ods).

Grato @schiavinatto pela valiosa informação!
Procederei dessa forma. Contudo, antes preciso elaborar um código funcional.
Abraço e, mais uma vez, obrigado!

Boa tarde pessoal!

Não consigo fazer com que o arquivo selecionado seja aberto na planilha ativa. Já tentei de diversas formas, sem sucesso.

Agradeço a quem puder me orientar. Posto a seguir o código:

'================================================|'
Sub ImportarArquivo
'================================================|'

Dim dlg_select_file as Object
Dim args()
Dim path As String
Dim doc As Object
Dim oSheet As Object

    dlg_select_file = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
    dlg_select_file.setTitle("Selecione um arquivo")

    If dlg_select_file.Execute() Then

        path = dlg_select_file.getFiles()(0)
        doc = StarDesktop.loadComponentFromURL(path, "_default", 0, args())
        
        oSheet = thisComponent.sheets ("Nome Atual")
	oSheet.Name = "Novo Nome"
		
	End If
     
End Sub

Quando diz “arquivo selecionado” entendo que se refere a uma planilha especifica de um determinado arquivo.ods, é isso?


Tentei gerar com o gravado de macros, mas só grava até a abertura do Dialogo de Inserir planilha, os dados preenchido no Dialogo, não.

Não necessariamente, ainda que isso também seja interessante. Mas, por ora, importar o arquivo já estaria de bom tamanho, visto que os arquivos que vou importar possuem apenas uma planilha.

Como eu disse, a intenção é simular o recurso Inserir planilha do arquivo que já existe no LO (Menu > Planilha > Inserir planilha do arquivo).

Aí você poderia me perguntar por qual razão eu quero fazer isso se o recurso já existe. Resposta: a pessoa que vai utilizar a planilha teria um pouco de dificuldade para fazer o processo de importação do arquivo pelo menu do Calc.

Assim, pensei em colocar um botão na planilha em que preciso que os dados sejam carregados, de forma que o usuário apenas selecionasse o arquivo em que estão contidos os dados (um arquivo que contém apenas uma planilha).

O código acima já executa esse processo, salvo pelo fato de que abre o arquivo escolhido separadamente, em vez que inserir os dados na planilha ativa.

Uma outra ideia seria fazer com que, uma vez selecionado o arquivo, o Calc copiasse todos os dados da planilha existente no arquivo e depois os colasse na planilha ativa, da mesma forma que faríamos com CTRL+C > CTRL+V, mas não faço ideia de como fazer isso e, além disso, creio que seriam exibidas muitas informações na tela.

Enfim, espero não ter complicado ainda mais a explicação.

Ola @tiuzao, A PLANILHA a importar e sempre a mesma?


Se SIM, já tentou o recurso: menu Planilha / Links externos… ( a área a importar tem que estar NOMEADA )


Em URL , clique em PROCURAR], selecione o arquivo, e aguarde …


Vai aparecer na quadro abaixo as áreas nomeadas, selecione a desejada …


Se o arquivo é atualizado constantemente, selecione [v]Atualizar e preencha o tempo…
E OK.

Olá, @schiavinatto!

Obrigado pela dica mas os arquivos são diferentes, razão pela qual utilizar o recurso links externos não é uma opção.

Mas vou continuar pesquisando para encontrar uma forma de fazer a macro funcionar da maneira que desejo.

Segue possível solução em tópico semelhante: