Prezados, ainda estou engatinhando com VBA e preciso muito de uma ajuda.
Estou tentando aprender macro para automatizar uma planilha no trabalho.
Considerando que tenho uma pasta de trabalho com esses códigos vba, na primeira worksheet há uma tabela (intervalo formatado como tabela) que não deverá ser alterada em momento algum (colunas A:AK). Essa tabela tem algumas fórmulas vinculadas à uma outra tabela na mesma worksheet e que começa na coluna AN (intervalo também formatado como tabela).
Ao clicar num botão de comando, selecionarei uma base de dados externa que todo o seu conteúdo, exceto o cabeçalho, será copiado e colado na tabela que começa na coluna AN (mencionado acima), na primeira linha após o cabeçalho (cabeçalho em AN2). Após isso, a macro me mostrará um pop up para "salvar como" e indicarei o nome do arquivo e o destino para salvar um novo arquivo sem o botão de comando inicial. Portanto, baseado nessas informações, preciso:
1 - Copiar os dados de um arquivo de excel (base de dados externa que será selecionada através do botão de comando), de forma que a macro selecione apenas o intervalo com os dados, com exceção do cabeçalho, e não copie toda a worksheet;
2 - apagar todo o conteúdo da tabela (intervalo formatado como tabela, cujo nome é BaseModificada), da coluna AN até a coluna CG), mantendo o cabeçalho;
3 - colar esses dados do item 1 na tabela BaseModificada, logo abaixo do cabeçalho;
4 - abrir um pop up de "salvar como" para que eu selecione o destino e indique o nome do arquivo a ser salvo sem o botão de comando.
Segue o código que consegui até agora. O que não estou conseguindo é não deletar o conteúdo da tabela que começa na coluna A, nem colar a base de dados na tabela que começa na coluna AN, mantendo o cabeçalho.
------------------------------------------------------------------------------
Option Explicit
Private Sub btExecuta_Click()
Application.ScreenUpdating = False
'definir variáveis
'----------------------------------------
Dim w As Worksheet
Dim WNew As Workbook
Dim ArqParaAbrir As Variant
Dim A As Integer
Dim NomeArquivo As String
Dim CaixaDialogo As FileDialog
'capturar arquivos para tratamento
'----------------------------------------
ArqParaAbrir = Application.GetOpenFilename("Arquivo Excel (*.xlsx),*.xl*", _
Title:="Selecione a base para verificação", _
MultiSelect:=True)
If Not IsArray(ArqParaAbrir) Then
If ArqParaAbrir = "" Or ArqParaAbrir = False Then
MsgBox "Nenhum arquivo selecionado", vbOKOnly, "Processo cancelado"
Exit Sub
End If
End If
'começa a importação dos dados
'----------------------------------------
Set w = Sheets("Planilha1")
w.UsedRange.EntireColumn.Delete
w.Select
'Loop para importação do arquivo
'----------------------------------------
For A = LBound(ArqParaAbrir) To UBound(ArqParaAbrir)
NomeArquivo = ArqParaAbrir(A)
Application.Workbooks.Open (NomeArquivo)
Set WNew = ActiveWorkbook
ActiveSheet.Range("am3").CurrentRegion.Select
Selection.Copy Destination:=w.Cells(w.Rows.Count, 1).End(xlUp).Offset(1, 0)
Application.DisplayAlerts = False
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = False
w.Cells(w.Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Next A
'mostra a tela de salvar como
'----------------------------------------
Set CaixaDialogo = Application.FileDialog(msoFileDialogSaveAs)
With CaixaDialogo
.Show
.Execute
End With
ActiveWorkbook.Close SaveChanges:=True
End Sub
-----------------------------------------------------------------------------------------