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