none
Busca de dados em rede RRS feed

  • Pergunta

  • Boa tarde pessoal

    Estou tentando importar dados da planilha que mostrei no print abaixo. O dados que estou interessado em importar estão entre as colunas 22 a 28 nas linhas de 10 a 33, gostaria de puxar estes dados sem necessitar acessar e abrir a planilha que fica na rede com esse endereço "G:\Prod\Lixiviac\2014\Mês01\Conc01.xlsm". Detalhe os arquivos "Conc" mantem este prefixo e de acordo com os "dias do mês" o número final("01") vária, se fosse possível escolher o arquivo que quero através da macro variando a minha escolha de data da pasta ano até a importação dos dados de acordo com a minha escolha de arquivo.

    Muito obrigado a todos.


    terça-feira, 5 de agosto de 2014 16:43

Respostas

  • Tente adaptar o código abaixo para buscar uma região retangular da pasta de trabalho de origem:

    Private Sub ADO_Excel()
      Dim cn As ADODB.Connection
      Dim rs As ADODB.Recordset
      
      Dim strDB As String
      Dim strSQL As String
      
      Dim n As Long
      
      'Instancia-se uma nova Conexão e um novo RecordSet:
      Set cn = New ADODB.Connection
      Set rs = New ADODB.Recordset
      
      'Caminho da Pasta de Trabalho:
      strDB = "C:\Temp\Banco.xlsx"
      
      'Aqui cria-se a cadeia de conexão.
      cn.ConnectionString = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & strDB & ";" & _
        "Extended Properties=""Excel 12.0;HDR=No"";"""
      cn.Open 'Abre a conexão
      
      'Consulta SQL a ser feita. Observe o símbolo de $ feita
      'ao fim de cada nome de tabela.
      strSQL = "SELECT * FROM [tblContatos$B3:C6]"
    
      'Executa consulta
      Set rs = cn.Execute(strSQL)
      
      'Este método copia todo o RecordSet para a Planilha:
      Range("A1").CopyFromRecordset rs
      
      rs.Close
      cn.Close
    End Sub

    Em último caso, se precisar buscar células específicas, faça algo como:

      For Each vAddress In Array("A1", "D3", "C5", "E8")
        Range(vAddress) = cn.Execute("SELECT * FROM [tblContatos$" & vAddress & "]").Fields(0)
      Next vAddress
    
    Essa rotina possui baixo desempenho.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 8 de agosto de 2014 00:26
    Moderador

Todas as Respostas

  • Olá Lucas, 

    veja se reponde sua dúvida:

    http://www.ambienteoffice.com.br/Excel/obter_dados_de_pastas_de_trabalho_fechadas/

    Att.  Michel Macário

    quarta-feira, 6 de agosto de 2014 06:43
  • Olá Michel,

    Então já tentei esta macro em outras vezes, mas o problema que ela puxa apenas uma célula e quando tento colocá-la dentro de uma estrutura de repetição ocorre um erro de compilação.

    Muito obrigado.

    quarta-feira, 6 de agosto de 2014 13:56
  • Tente adaptar o código abaixo para buscar uma região retangular da pasta de trabalho de origem:

    Private Sub ADO_Excel()
      Dim cn As ADODB.Connection
      Dim rs As ADODB.Recordset
      
      Dim strDB As String
      Dim strSQL As String
      
      Dim n As Long
      
      'Instancia-se uma nova Conexão e um novo RecordSet:
      Set cn = New ADODB.Connection
      Set rs = New ADODB.Recordset
      
      'Caminho da Pasta de Trabalho:
      strDB = "C:\Temp\Banco.xlsx"
      
      'Aqui cria-se a cadeia de conexão.
      cn.ConnectionString = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & strDB & ";" & _
        "Extended Properties=""Excel 12.0;HDR=No"";"""
      cn.Open 'Abre a conexão
      
      'Consulta SQL a ser feita. Observe o símbolo de $ feita
      'ao fim de cada nome de tabela.
      strSQL = "SELECT * FROM [tblContatos$B3:C6]"
    
      'Executa consulta
      Set rs = cn.Execute(strSQL)
      
      'Este método copia todo o RecordSet para a Planilha:
      Range("A1").CopyFromRecordset rs
      
      rs.Close
      cn.Close
    End Sub

    Em último caso, se precisar buscar células específicas, faça algo como:

      For Each vAddress In Array("A1", "D3", "C5", "E8")
        Range(vAddress) = cn.Execute("SELECT * FROM [tblContatos$" & vAddress & "]").Fields(0)
      Next vAddress
    
    Essa rotina possui baixo desempenho.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 8 de agosto de 2014 00:26
    Moderador
  • Desculpe a demora para responder Felipe,

    Mas funcionou muito bem!

    Muito obrigado!

    quinta-feira, 14 de agosto de 2014 12:21