Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como acessar outro arquivo e copiar informações de outras pastas de trabalho, com diversas planilhas aonde é possível escolher o numero da planilha desejada.

Problema: Como criar uma variável para escolher a planilha a ser copiada dentro de uma pasta de trabalho de excel? partindo de uma planilha base na qual ela acessa outros arquivos porem ela só copia a primeira planilha.

Obs: O script a seguir esta funcionando mas, só copia a primeira planilha do arquivo escolhido.

Script:

Sub importar01()

Application.ScreenUpdating = False Application.DisplayAlerts = False

'Dim define as variaveis Dim nomearq As String Dim nomearq2 As String nomearq = Application.GetOpenFilename Workbooks.Open Filename:=nomearq 'variavel recebe o nome do arquivo nomearq2 = ActiveWorkbook.Name

Sheets(1).Select (AQUI O PROBLEMA OCORRE)

Range("a2").Select 'a aprtir de a2 ctrl shift para baixo e direita, e copia Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Copy Workbooks("base.xlsm").Activate 'para achar a ultima celula preenchida Range("a1048576").End(xlUp).Offset(1, 0).Select ActiveCell.PasteSpecial xlFormats ActiveCell.PasteSpecial xlValues Workbooks(nomearq2).Activate Workbooks(nomearq2).Close

'Ajusta a largura das colunas Columns("A:G").EntireColumn.AutoFit

Range("a1").Select

Application.DisplayAlerts = True Application.ScreenUpdating = True

End Sub

Pensei em criar uma variável que recebe um dado através do InputBox:

Sub importar2()

Dim numero As Integer (talvez o como Byte) numero = InputBox("Digite o número da planilha:") Sheets(numero).Select

End Sub

Porém não obtive êxito !

4 respostas

Talvez estes exemplos ajudem:

https://superuser.com/questions/1011218/excel-how-to-copy-all-sheets-from-one-workbook-to-another

http://codevba.com/excel/copy_worksheet.htm#.Wly1l6hKvIU

Edgard,

Da forma em que o código está escrito vc sempre selecionará a primeira planilha (Sheet) do arquivo.

Sheets(1).Select (AQUI O PROBLEMA OCORRE)

Supondo que existem 3 planilhas dentro do seu arquivo: Jan, Fev e Mar.

Estas 3 planilhas podem ser ordenadas das seguintes maneiras:

Jan, Fev e Mar - Planilha selecionada: Jan

Jan, Mar e Fev - Planilha selecionada: Jan

Fev, Jan e Mar - Planilha selecionada: Fev

Fev, Mar e Jan - Planilha selecionada: Fev

Mar, Jan e Fev - Planilha selecionada: Mar

Mar, Fev e Jan - Planilha selecionada: Mar

Isso ocorre pois Sheet(1).Select seleciona a primeira planilha do arquivo, caso vc queira seleciona uma planilha específica deve-se mostrar o nome (String ou variável cujo nome esteja armazenado) desejado.

Sendo assim, quando quiser selecionar uma aba específica use, por exemplo:

Sheets("Jan").Select

Desta forma o VBA selecionará a planilha que tem a string "Jan" como nome.

Obs: deve-se copiar o nome por igual, qualquer diferença e continuará a indicar erro!

Espero ter ajudado.

Obrigado pela ajuda porém a questão é pedir ao usurário para escolhe qual planilha deseja (através de uma inputbox) onde ele entra com o número da planilha.

criar uma variável

Sub teste() ...

Dim num_plan As Integer num_plan = inputBox("Digite o número da planilha desejada:") Sheets(num_plan)

... End Sub

Porém essa abordagem não resolveu o problema!

solução!

Resolvido: Primeiro criei um script para definir o numero da planilha:


Sub escolhe_a_plan()

Dim plan As Byte plan = InputBox("digite a plan") Sheets(plan).Select

End Sub


Depois inclui no script original:


Sub importar() Application.ScreenUpdating = False Application.DisplayAlerts = False

Dim nomearq As String Dim nomearq2 As String Dim plan As Byte

plan = InputBox("digite a plan")

nomearq = Application.GetOpenFilename Workbooks.Open Filename:=nomearq nomearq2 = ActiveWorkbook.Name

Sheets(plan).Select

Range("a2").Select Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Copy Workbooks("base.xlsm").Activate Range("a1048576").End(xlUp).Offset(1, 0).Select ActiveCell.PasteSpecial xlFormats ActiveCell.PasteSpecial xlValues Workbooks(nomearq2).Activate Workbooks(nomearq2).Close

Columns("A:G").EntireColumn.AutoFit

Range("a1").Select

Application.DisplayAlerts = True Application.ScreenUpdating = True

End Sub


Fim!