Página 1 de 1

Criar arquivo .xlsm à partir de uma lista

Enviado: 16 Nov 2023 às 18:42
por fcarlosc2018
Boa noite,

Gostaria de gerar arquivos excel.xlsm com base em um arquivo específico (MATRIZ.xlsm) e uma lista em uma coluna com os nomes para renomear conforme for criando os arquivos.

Tenho um código que faz isso, porém ele está gerando arquivos com base no que estou usando, queria que buscasse o arquivo (MATRIZ.xlsm).

Sub CriarArquivosXLSM()
'On Error Resume Next

Dim LIN As Long, totLIN As Long
Dim Endereco As String, Nome As String

'Plan2.Rows(1).EntireRow.Delete

totLIN = Plan4.Range("A" & Rows.Count).End(xlUp).Row

For LIN = 1 To totLIN

Endereco = ThisWorkbook.Path & Plan3.Range("L1").Value
Endereco = Plan3.Range("L2").Value

Nome = Plan3.Range("L1").Value & "MATRIZ.xlsm"
Nome = Plan4.Cells(LIN, 1).Value & ".xlsm"

ThisWorkbook.SaveCopyAs Endereco & Nome

Next

MsgBox "Os Arquivos Excel Foram Gerados Com Sucesso...!"

End Sub

Sei que o problema está nesta parte da linha "ThisWorkbook.Path", já tentei alterar e não funciona, continua pegando meu arquivo corrente e gerando os outros.

Att,
Francisco

Re: Criar arquivo .xlsm à partir de uma lista

Enviado: 17 Nov 2023 às 09:59
por osvaldomp
Veja se lhe ajuda.

1. considerei que a lista com os nomes a serem atribuídos às cópias do arquivo MATRIZ.xlsm estará na coluna A, a partir de A1, da planilha ativa.
2. o arquivo MATRIZ.xlsm também deverá estar aberto ao rodar o código abaixo
3. as cópias serão gravadas na pasta em que está gravado o arquivo MATRIZ.xlsm

Sub CópiasDeMatriz()
Dim r As Range
Application.ScreenUpdating = False
For Each r In Range("A1:A" & Cells(Rows.Count, 1).End(3).Row)
Workbooks("MATRIZ.xlsm").SaveCopyAs r.Value & " MATRIZ.xlsm"
Next r
End Sub

Re: Criar arquivo .xlsm à partir de uma lista

Enviado: 18 Nov 2023 às 11:12
por fcarlosc2018
Bom dia osvaldomp

Obrigado por responder.

Não vai dar certo, porque eu vou estar em outro arquivo Excel VBA aberto, é apartir dele que vou executar as tarefas.
No caso, vou estar com o arquivo "ROTINAS DO SISTEMA", e nele vai ter o botão "GERAR PLANILHAS", quando eu clicar nele é para ir na aba "Auxiliar", na Coluna A à partir da linha 2 onde vai estar a lista com o nome dos arquivos que gostaria que fosse gerado. O código vai buscar o arquivo "MATRIZ" na pasta corrente (onde está o arquivo ROTINAS DO SISTEMA", vai criando os arquivo e renomeando e salvando em outra pasta "C:\HC".
Teria como executar dessa forma !?

Agradeço desde já.

Att,
Francisco

Re: Criar arquivo .xlsm à partir de uma lista

Enviado: 18 Nov 2023 às 21:50
por osvaldomp
Olá, @fcarlosc2018.

Entendi. Veja se esse código abaixo faz o que você deseja.
____________________________________________________________________________________________________
Sub CópiasDeMatrizV2()
Dim r As Range, wb As Workbook
Application.ScreenUpdating = False
Set wb = Workbooks.Open(ThisWorkbook.Path & "\MATRIZ.xlsm")
With ThisWorkbook.Sheets("Auxiliar")
For Each r In .Range("A2:A" & .Cells(Rows.Count, 1).End(3).Row)
wb.SaveCopyAs "C:\HC\" & r.Value & " MATRIZ.xlsm"
Next r
End With
wb.Close
End Sub
____________________________________________________________________________________________________

Re: Criar arquivo .xlsm à partir de uma lista

Enviado: 21 Nov 2023 às 18:37
por fcarlosc2018
Boa noite osvaldomp

Funcionou parcialmente, assim que clico para gerar ele abre o arquivo "MATRIZ" no modo VBA, abre o formulário, aí tenho que acessar a planilha primeiro pra ele começar a fazer as cópias e depois tenho que salvar.
Más tá realizando a tarefa.

Att,
Francisco

Re: Criar arquivo .xlsm à partir de uma lista

Enviado: 21 Nov 2023 às 20:02
por osvaldomp
As suas informações são incompletas e imprecisas, então fica difícil de resolver pois SEMPRE fica alguma pendência que não foi tratada antes, e essa situação meio que desanima e desestimula quem tenta lhe ajudar.

O código que passei faz as seguintes operações, compatíveis com as suas informações:
1. abre o arquivo MATRIZ, que está salvo na mesma Pasta Windows em que está salvo o arquivo que contém a macro
2. salva cópias do arquivo MATRIZ com nomes conforme a listagem de nomes contida na coluna A da planilha Auxiliar, planilha essa pertencente ao arquivo que contém a macro; as cópias são salvas em "C:\HC\"
3. por último fecha o arquivo MATRIZ
E para executar as operações acima a única intervenção requerida do operador é iniciar a execução do código.

Aí você comentou:
1. ele abre o arquivo "MATRIZ" no modo VBA, ... ~~~> o arquivo é aberto no modo Excel, e não no modo VBA
2. abre o formulário, .. ~~~> que formulário, até então você não havia se referido a qualquer formulário; qual é a influência do tal formulário no processo ora tratado ?
3. aí tenho que acessar a planilha primeiro ... ~~~> não entendi, precisa acessar qual planilha primeiro ? porque precisa acessar ?
4. pra ele começar a fazer as cópias ~~~> possivelmente existem mais algumas interferências no processo que você não informou antes, pois para o código fazer as cópias não é necessária qualquer intervenção sua além de iniciar a execução
5. e depois tenho que salvar.~~~> salvar o quê ?
6. Más tá realizando a tarefa. ~~~> você alega que o código funciona "parcialmente" visto que necessita de algumas intervenções suas, então a conclusão é NÃO ESTÁ REALIZANDO A TAREFA para a qual ele foi elaborado

dica - com base na documentação de cada aplicativo, a utilização de termos técnicos apropriados facilita o entendimento e transmite ideias exatas e precisas, pois melhor define cada situação; é aconselhável o seu uso ao invés do uso de linguagem figurativa

Re: Criar arquivo .xlsm à partir de uma lista

Enviado: 22 Nov 2023 às 17:13
por fcarlosc2018
Boa tarde osvaldomp

Encontrei um código e fui adaptando para o que eu precisava e deu certo.

Sub CriarArquivosXLSM()

Dim listaNomes As Range
Dim nome As Variant
Dim arquivoOrigem As String
Dim pastaDestino As String
Dim arquivoDestino As String

' Defina a lista de nomes em uma coluna do Excel
Set listaNomes = ThisWorkbook.Sheets("Auxiliar").Range("A1:A200")

' Defina o caminho da pasta de origem (onde o arquivo será copiado)
PastaOrigem = "C:\HC\ROTINAS DO SISTEMA\MATRIZ\"

' Defina o caminho da pasta de destino (onde os arquivos serão copiados com os nomes da lista)
pastaDestino = "C:\HC\"

' Loop através dos nomes na lista
For Each nome In listaNomes
' Verifica se o nome não está vazio
If nome <> "" Then
' Define o caminho completo do arquivo de origem
arquivoOrigem = PastaOrigem & "MATRIZ.xlsm"

' Define o caminho completo do arquivo de destino com o nome da lista
arquivoDestino = pastaDestino & nome & ".xlsm"

' Copia o arquivo de origem para o arquivo de destino com o nome da lista
FileCopy arquivoOrigem, arquivoDestino
End If
Next nome

MsgBox "Os Arquivos Excel Foram Gerados Com Sucesso...!"

End Sub


Agradeço por responder.
Att,
Francisco