none
VBA - Gerar Arquivo Excel do Access (Problema com QueryTable) RRS feed

  • Pergunta

  • Boa tarde!!

    Bom gente, estou com um Projeto que basicamente o objetivo é Gerar o Excel (Relatório) apartir do Click de um botão no Access usando VBA.

    O Conteúdo desse Relatório é o resultado de uma Stored Procedure do banco SQL Server.

    Porém na linha:

     

     With Worksheets(4).QueryTables.Add( _
            connection:=recordset, _
            Destination:=Range("A2"))
        End With

     

    Está dando o seguinte erro: "Argumento ou chamada de procedimento inválida"

     

    Código Completo:

     

    Sub GeraPlanilhaDT()
        
        Dim MeuExcel As New Excel.Application
        Dim wb As New Excel.Workbook
        
        Set MeuExcel = CreateObject("Excel.Application")
        MeuExcel.Workbooks.Add
    
    ' MeuExcel.Worksheets("Plan1").Range("A1") = " haha"
        MeuExcel.Visible = True
    
    '   Declaração variávies globais
        Dim strNomeServidor, strBaseDados, strProvider, strConeccao, strStoredProcedure As String
    
    '   Data Source
        strNomeServidor = "m98\DES;"
    '   Base de Dados Inicial (INITIAL CATALOG)
        strBaseDados = "SGLD_POC;"
    '   Provider
        strProvider = "SQLOLEDB.1;"
    '   Nome Stored Procedure
        strStoredProcedure = "SP_ParametrosLeads_DT"
        
    '   Connection String
        strConeccao = "Provider=" & strProvider & "Integrated Security=SSPI;Persist Security Info=True;Data Source=" & strNomeServidor & "Initial Catalog=" & strBaseDados
        
    '   Objeto de conecção
        Dim cnt As New ADODB.connection
    
    '   Objeto para executar SP
        Dim cmd As New ADODB.command
    
    '   Recordset é onde é guardado o resultado da SP
        Dim rs As New ADODB.recordset
    
    '   Parametro da SP (DT)
        Dim prm As New ADODB.parameter
       
    
        
    '   Abre conecção
        cnt.Open strConeccao
        
        cmd.ActiveConnection = cnt
        cmd.CommandType = adCmdStoredProc
        cmd.CommandText = strStoredProcedure
        cmd.CommandTimeout = 0
        
    '   Cria Parametro da Stored Procedure
        Set prm = cmd.CreateParameter("DT", adInteger, adParamInput)
        cmd.Parameters.Append prm
    '   Textbox para usuário inserir Parâmetro da SP
        cmd.Parameters("DT").Value = InputBox("Digite o Código DT", "Código do Distribuidor")
        
    '   Executa SP e seta valor no recordset
        Set rs = cmd.Execute()
    
    '   Nome da Planilha Principal com todos os Registros
        Dim nomeWorksheetPrincipal As String
        nomeWorksheetPrincipal = "Principal"
        
    '   Cria Planilha  e Adiciona o recordset ao conteudo
        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = nomeWorksheetPrincipal
        
    
        
        With MeuExcel.Worksheets(4).QueryTables.Add( _
            connection:=rs, _
            Destination:=Range("A2"))
        End With
        
        'Range("A1").CopyFromRecordset recordset
    
    '   Finaliza variaveis (Fecha conecção, seta recordset como nulo)
        cnt.Close
        Set rs = Nothing
        Set cmd = Nothing
        Set strNomeServidor = Nothing
        Set strBaseDados = Nothing
        Set strProvider = Nothing
        ' Set strStoredProcedure = Nothing
        
        If (ActiveSheet.UsedRange.Rows.Count > 1) Then
            FormataDadosTabela
        Else
            MsgBox ("Não foi encontrado nenhum Distribuidor com esse DT")
        End If
        
    
    End Sub

     

    PS: O mais bizarro é que esse código funciona se for executado no vba do Excel, mas não funciona no Access.

     

    Obrigado desde já.

    Pedro Souza


    • Editado Pedro Souza terça-feira, 3 de janeiro de 2012 18:20
    terça-feira, 3 de janeiro de 2012 17:13