none
VBA para excell: Como obter dados de uma célula de planilha não ativa (fechada)

    Question

  • Boa pessoal.

    Depois de muito tempo estou de volta e precisando da ajuda dos "expert".

    Estou desenvolvendo em VBA-Excell 2010.

    Na pasta de trabalho ativa (Teste.xlsm), criei um formulário. No "label1" desse formulário pretendo inserir a data contante da última linha da coluna "A" da pasta de trabalho "Banco_de_dados", planilha "TRD".

    Ocorre que não quero que a pasta de trabalho "Banco_de_dados" seja aberta e nem ativa. Pretendo que ela fique fechada.

    Já pesquisei muito e todos os códigos que consegui encontrar não funcionou.

    Fico desde já agradecido pela ajuda de vocês.

    Muito obrigado.

    Wednesday, September 12, 2012 2:46 AM

Answers

  • Prezados:

    Encontrei um código que pode ser utilizado perfeitamente para obter dados de planilha fechada.

    O código foi postado por "Mauro Coutinho"', noutro forum, com o título: "Código VBA p/Importar dados de uma planilha sem abri-la".

    Fazendo algumas pequenas adaptações pode ser utilizado em várias situações.

    Espero que possa ser útil a mais alguém e agradeço o "Mário" pelas dicas muito úteis.

    Segue o código.

    Saudações a todos.

    Sub ReadDataFromAllWorkbooksInFolder()
        Dim FolderName As String, wbName As String, cValue As Variant
        Dim wbList As String, sValuePlan1 As String
        
            'Path (Diretorio) -Ajustar o Caminho
            FolderName = "C:\Foldername"
            
                'Nome do Arquivo de onde extrairemos a informação
                wbName = Dir(FolderName & "\" & "Teste.xls")
                'Armazenamos nas Variaveis
                wbList = wbName
                wbName = Dir
            
                'le o Valor no workbook
                cValue = GetInfoFromClosedFile(FolderName, wbList, "Plan1", "A1")
                
                'Msgbox com o Valor em A1
                MsgBox "O Valor em A1 - Plan1 é :- " & cValue
                
                'Armazenamos o Valor na variavel
                sValuePlan1 = cValue
                
                'Coloca o Valor na Celula
                Cells(1, 1).Formula = cValue
    
    End Sub
    
        Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
                                                wbName As String, _
                                                wsName As String, _
                                                cellRef As String) As Variant
        
        Dim arg As String
            GetInfoFromClosedFile = ""
            
            If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
            
            If Dir(wbPath & "\" & wbName) = "" Then Exit Function
            
                arg = "'" & wbPath & "[" & wbName & "]" & _
                    wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
            
            On Error Resume Next
            GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
            
        End Function
    

    Saturday, March 09, 2013 11:05 AM

All replies

  • Por que você não coloca a informação da pasta de trabalho "Banco_De_Dados" como vínculo em sua planilha?

    Outra forma é abrir via VBA, em objeto, sem que o usuário perceba que abriu.


    Nane


    • Edited by nanebnu Wednesday, September 12, 2012 12:51 PM
    Wednesday, September 12, 2012 12:50 PM
  • Luiz, como é a estrutura da pasta de trabalho da planilha Banco_de_dados? Seria ela uma tabela que não possua linhas em branco?

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

    Wednesday, September 12, 2012 11:56 PM
    Moderator
  • Por que você não coloca a informação da pasta de trabalho "Banco_De_Dados" como vínculo em sua planilha?

    Outra forma é abrir via VBA, em objeto, sem que o usuário perceba que abriu.


    Nane


    Prezada Nane,

    Colar a informação como vínculo dá certo. Só que o inconveniente é que no momento que abre a planilha tem que habilitar o vínculo. Ai pode ser que o usuário não consiga. Acaba dando problema.

    Consegui fazer na segunda opção que me apresentou e acredito que ficou melhor.

    Segue o código que fiz:

    Sub Data_Tabela_Única()
    
        Workbooks.Open Filename:="C:\Users\.....\Banco_de_dados.xlsm"
        ActiveWindow.Visible = False
        Windows("Banco_de_dados.xlsm").Visible = True
        Sheets("TR_Diaria").Select
        Range("A1").Select
        
        Dim UltimaLinha As String
        UltimaLinha = Cells(Rows.Count, 1).End(xlUp).Row
            
        Dim TRD_até
        TRD_até = Range("A" & UltimaLinha - 1).Value
        TRD_até = CStr(TRD_até)
        UserForm_TRD.Label_TRD_até.Caption = TRD_até
        
        Dim TRD_para
        TRD_para = Range("A" & UltimaLinha).Value
        TRD_para = CStr(TRD_para)
        UserForm_TRD.Label_TRD_para.Caption = TRD_para
        
        Workbooks("Banco_de_dados.xlsm").Close SaveChanges:=False
    
    End Sub
    
    Muito obrigado pela sua ajuda.


    Wednesday, September 12, 2012 11:57 PM
  • Luiz, você abriu a pasta de trabalho no seu código. É possível fazer isso sem abri-la.

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

    Thursday, September 13, 2012 12:27 AM
    Moderator
  • Oi Felipe:

    Trata-se de um planilha habilitada para macros do Excel (extensão: .xlsm).

    No meu caso possui dados em apenas parte (ínfima) das coluna "A" e "B". As demais células e linhas estão em branco.

    Saudações.

    PS.: Já coloquei o endereço de seu site nos meus favoritos.

    Obrigado.


    Thursday, September 13, 2012 3:25 AM
  • Prezados:

    Encontrei um código que pode ser utilizado perfeitamente para obter dados de planilha fechada.

    O código foi postado por "Mauro Coutinho"', noutro forum, com o título: "Código VBA p/Importar dados de uma planilha sem abri-la".

    Fazendo algumas pequenas adaptações pode ser utilizado em várias situações.

    Espero que possa ser útil a mais alguém e agradeço o "Mário" pelas dicas muito úteis.

    Segue o código.

    Saudações a todos.

    Sub ReadDataFromAllWorkbooksInFolder()
        Dim FolderName As String, wbName As String, cValue As Variant
        Dim wbList As String, sValuePlan1 As String
        
            'Path (Diretorio) -Ajustar o Caminho
            FolderName = "C:\Foldername"
            
                'Nome do Arquivo de onde extrairemos a informação
                wbName = Dir(FolderName & "\" & "Teste.xls")
                'Armazenamos nas Variaveis
                wbList = wbName
                wbName = Dir
            
                'le o Valor no workbook
                cValue = GetInfoFromClosedFile(FolderName, wbList, "Plan1", "A1")
                
                'Msgbox com o Valor em A1
                MsgBox "O Valor em A1 - Plan1 é :- " & cValue
                
                'Armazenamos o Valor na variavel
                sValuePlan1 = cValue
                
                'Coloca o Valor na Celula
                Cells(1, 1).Formula = cValue
    
    End Sub
    
        Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
                                                wbName As String, _
                                                wsName As String, _
                                                cellRef As String) As Variant
        
        Dim arg As String
            GetInfoFromClosedFile = ""
            
            If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
            
            If Dir(wbPath & "\" & wbName) = "" Then Exit Function
            
                arg = "'" & wbPath & "[" & wbName & "]" & _
                    wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
            
            On Error Resume Next
            GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
            
        End Function
    

    Saturday, March 09, 2013 11:05 AM