Se você deseja importar muitos dados de uma pasta de trabalho fechada, pode fazer isso com o ADO e a macro abaixo.
Se você deseja recuperar dados de outra planilha diferente da primeira planilha na pasta de trabalho fechada,
você deve se referir a um intervalo nomeado definido pelo usuário. A macro abaixo pode ser usada assim (no Excel 2000 ou posterior):
GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "A1: B21", ActiveCell, False GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("B3"), True Sub GetDataFromClosedWorkbook "C: \ FolderName \ WorkbookName.xls", "MyDataRange", Range ("B3"), True Sub GetDataFromClosedWorkbook (SourceFile As String, SourceRange As String, _ TargetRange As Range, IncludeFieldNames As Boolean) 'requer uma referência à biblioteca Microsoft ActiveX Data Objects' se SourceRange for uma referência de intervalo: 'isso retornará dados da primeira planilha em SourceFile' se SourceRange for um referência de nome definido: 'isso retornará dados de qualquer planilha em SourceFile' SourceRange deve incluir os cabeçalhos de intervalo 'Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString As String Dim TargetCell As Range, i As Integer dbConnectionString = "DRIVER = {Driver Microsoft Excel (* .xls)}; " & _ "ReadOnly = 1; DBQ =" & SourceFile Set dbConnection = New ADODB.Connection On Error GoTo InvalidInput dbConnection.Open dbConnectionString 'abrir a conexão de banco de dados Set rs = dbConnection.Execute ("[" & SourceRange & "]") Definir TargetCell = TargetRange.Cells (1, 1) If IncludeFieldNames Then For i = 0 To rs.Fields.Count - 1 TargetCell.Offset (0, i) .Formula = rs.Fields (i) .Name Next i Defina TargetCell = TargetCell .Offset (1, 0) End If TargetCell.CopyFromRecordset rs rs.Close dbConnection.Close 'fecha a conexão do banco de dados Set TargetCell = Nothing Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Exit Sub InvalidInput: MsgBox "O arquivo de origem ou o intervalo de origem é inválido! ", _ vbExclamation," Obter dados da pasta de trabalho fechada "End Sub
Outro método que não usa o método CopyFromRecordSet Com a macro abaixo você pode realizar a importação e ter melhor controle sobre os resultados retornados do RecordSet.
Sub TestReadDataFromWorkbook () 'preenche dados de uma pasta de trabalho fechada na célula ativa Dim tArray As Variant, r As Long, c As Long tArray = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: B21")' sem transpor 'For r = LBound (tArray, 2) To UBound (tArray, 2)' For c = LBound (tArray, 1) To UBound (tArray, 1) 'ActiveCell.Offset (r, c) .Formula = tArray ( c, r) 'Próximo c' Próximo r 'transpondo tArray = Application.WorksheetFunction.Transpose (tArray) For r = LBound (tArray, 1) To UBound (tArray, 1) For c = LBound (tArray, 2) To UBound (tArray, 2) ActiveCell.Offset (r - 1, c - 1) .Formula = tArray (r, c) Próximo c Próximo r End Sub Função privada ReadDataFromWorkbook (SourceFile As String, SourceRange As String) As Variant 'requer uma referência à biblioteca Microsoft ActiveX Data Objects 'se SourceRange for uma referência de intervalo:' esta função só pode retornar dados da primeira planilha em SourceFile 'se SourceRange for uma referência de nome definida:' esta função pode retornar dados de m qualquer planilha em SourceFile 'SourceRange deve incluir os exemplos de cabeçalhos de intervalo:' varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName.xls", "A1: A21") 'varRecordSetData = ReadDataFromWorkbook ("C: \ FolderName \ SourceWbName. xls "," A1: B21 ") 'varRecordSetData = ReadDataFromWorkbook (" C: \ FolderName \ SourceWbName.xls "," DefinedRangeName ") Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset Dim dbConnectionString AsString =" DRIVER " {Driver do Microsoft Excel (* .xls)}; ReadOnly = 1; DBQ = "& SourceFile Set dbConnection = New ADODB.Connection em erro GoTo InvalidInput dbConnection.Open dbConnectionString 'abre a conexão de banco de dados Set rs = dbConnection.Execute (" [" & SourceRange & "]") Em caso de erro GoTo 0 ReadDataFromWorkbook = rs.GetRows 'retorna uma matriz de dois dim com todos os registros em rs rs.Close dbConnection.Close' feche a conexão de banco de dados Set rs = Nothing Set dbConnection = Nothing On Error GoTo 0 Função de saída InvalidInput: MsgBox "O arquivo de origem ou o intervalo de origem é inválido! ", vbExclamation," Obter dados da pasta de trabalho fechada "Set rs = Nothing Set dbConnection = Nothing End Function
O exemplo de macro pressupõe que seu projeto VBA adicionou uma referência à biblioteca de objetos ADO.
Você pode fazer isso de dentro do VBE selecionando o menu Ferramentas, Referências e selecionando Microsoft
Biblioteca de objetos ActiveX Data Objects x.x.
Use ADO se você puder escolher entre ADO e DAO para importação ou exportação de dados.