Página 1 de 1

Erro em tempo de execução 9 ao usar Set Workbook

Enviado: 20 Nov 2019 às 08:42
por Osbont
Olá!

Adaptei uma macro para selecionar uma planilha, abri-la e copiar a plan1 para a plan1 de outra planilha (será copiado sempre para "Requisição ao Compras (AbrirArquivo3).xlsm").

Já tentei resolver mas dá erro em tempo de execução 9: Subscrito fora do intervalo.

A linha que dá erro é:
Set wsOrigem = Workbooks(lArquivo).Worksheets(Plan1)

A planilha roda para selecionar o arquivo e abrir mas daí tranca no erro.

Desde já agradeço pela atenção.
Segue o código completo

Sub lsSelecionarArquivo()
Dim fDlg As FileDialog
Dim lArquivo As String
Dim wsOrigem As Workbook
Dim wsDestino As Workbook


'Chama o objeto passando os parâmetros
Set fDlg = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
With fDlg
'Alterar esta propriedade para True permitirá a seleção de vários arquivos
.AllowMultiSelect = False

'Determina a forma de visualização dos aruqivos
.InitialView = msoFileDialogViewDetails

'Filtro de arquivos, pode ser colocado mais do que um filtro separando com ; por exemplo: "*.xls;*.xlsm"
.Filters.Add "All files", "*.*"

'Determina qual o drive inicial
.InitialFileName = "C:\"
End With

'Retorna o arquivo selecionado
If fDlg.Show = -1 Then
lArquivo = fDlg.SelectedItems(1)
MsgBox "O arquivo selecionado está em: " & lArquivo

'Especifica o caminho do arquivo de origem.
Workbooks.Open Filename:=lArquivo


'Especifica o nome e a aba do arquivo de origem, que deseja copiar os dados.
Set wsOrigem = Workbooks(lArquivo).Worksheets(Plan1)
'Especifica a aba no arquivo de destino, que deseja colar os dados.
Set wsDestino = Workbooks("Requisição ao Compras (AbrirArquivo3).xlsm").Worksheets(Plan1)
'Realiza o procedimento de copiar e colar os dados, no intervalo que desejar. Neste caso está sendo copiado todos os dados da planilha, exceto a primeira linha.
With wsOrigem
Cells.Select.Copy Destination:=wsDestino.Range("A1:CU8800")
End With

Else
MsgBox "Não foi selecionado nenhum arquivo"
End If
End Sub

Re: Erro em tempo de execução 9 ao usar Set Workbook

Enviado: 20 Nov 2019 às 10:23
por osvaldomp
Experimente:

1. substitua as linhas abaixo
Código: Selecionar todos
Dim wsOrigem As Workbook
Dim wsDestino As Workbook
por estas
Código: Selecionar todos
Dim wbOrigem As Workbook
Dim wbDestino As Workbook
Dim wsOrigem As Worksheet
Dim wsDestino As Worksheet

2. substitua as linhas abaixo
Código: Selecionar todos
'Especifica o caminho do arquivo de origem.
Workbooks.Open Filename:=lArquivo
'Especifica o nome e a aba do arquivo de origem, que deseja copiar os dados.
Set wsOrigem = Workbooks(lArquivo).Worksheets(Plan1)
'Especifica a aba no arquivo de destino, que deseja colar os dados.
Set wsDestino = Workbooks("Requisição ao Compras (AbrirArquivo3).xlsm").Worksheets(Plan1)
por estas
Código: Selecionar todos
'Especifica o arquivo de origem dos dados
Set wbOrigem = Workbooks.Open(lArquivo)
'Especifica a planilha de origem dos dados
Set wsOrigem = wbOrigem.Worksheets("Plan1")

'Especifica o arquivo de destino dos dados
Set wbDestino = Workbooks("Requisição ao Compras (AbrirArquivo3).xlsm")
'Especifica a planilha de destino dos dados
Set wsDestino = wbDestino.Worksheets("Plan1")

Re: Erro em tempo de execução 9 ao usar Set Workbook

Enviado: 20 Nov 2019 às 15:12
por Osbont
Resolvido.
Funcionou perfeito.
Tive que fazer somente uma alteração que foi substituir o("Plan1") somente por (1).
A primeira aba da planilha pode estar nomeada com qualquer nome.
Daí funcionou perfeito.
Muitíssimo grato pela ajuda, estava me quebrando.
Depois encontrei outro erro que corrigi.
Substituí a linha:
Cells.Select.Copy Destination:=wsDestino.Range("A1:CU8800")
Por:
Range("A1:CU8800").Copy Destination:=wsDestino.Range("A1:CU8800").
Estava dando erro 424 - O objeto é obrigatório.

O código todo da macro que seleciona arquivo e copia para planilha ficou assim:
Sub lsSelecionarArquivo()
Dim fDlg As FileDialog
Dim lArquivo As String
Dim wbOrigem As Workbook
Dim wbDestino As Workbook
Dim wsOrigem As Worksheet
Dim wsDestino As Worksheet

'Chama o objeto passando os parâmetros
Set fDlg = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
With fDlg
'Alterar esta propriedade para True permitirá a seleção de vários arquivos
.AllowMultiSelect = False

'Determina a forma de visualização dos aruqivos
.InitialView = msoFileDialogViewDetails

'Filtro de arquivos, pode ser colocado mais do que um filtro separando com ; por exemplo: "*.xls;*.xlsm"
.Filters.Add "All files", "*.*"

'Determina qual o drive inicial
.InitialFileName = "C:\"
End With

'Retorna o arquivo selecionado
If fDlg.Show = -1 Then
lArquivo = fDlg.SelectedItems(1)
'MsgBox abaixo informa o caminho do arquivo selecionado e o nome. É Opcional. Pode ser excluído.
MsgBox "O arquivo selecionado está em: " & lArquivo
'Especifica o arquivo de origem dos dados
Set wbOrigem = Workbooks.Open(lArquivo)
'Especifica a planilha de origem dos dados
Set wsOrigem = wbOrigem.Worksheets(1)
'Especifica o arquivo de destino dos dados
Set wbDestino = Workbooks("Requisição ao Compras (AbrirArquivo)3") ' Substitua pela sua planilha de destino
'Especifica a planilha de destino dos dados
Set wsDestino = wbDestino.Worksheets(1)
With wsOrigem
Range("A1:CU8800").Copy Destination:=wsDestino.Range("A1:CU8800")
End With

Else
MsgBox "Não foi selecionado nenhum arquivo"
End If
End Sub

Mais uma vez obrigado