Boa tarde, estou tentando adaptar um exemplo do amigo JPAulo que exporta determinadas informações do Banco para uma planilha Excel.
Neste eu gostaria de além de exportar, eu gostaria de aplicar alguns filtros anteriormente, quanto ao filtro, acho que está funcionando perfeitamente. O problema é quando eu tento usar o SELECT * em uma String, não sei se é possível, mas estou tentando assim:
'1º eu declaro
Dim stDocName As String
'2º Aqui também não possui problema, me retorna o nome da “tabela ou consulta” selecionada no formulário Filtro
stDocName = FiltroTipoRelatorio.Column(2)
'3º O erro ocorre quando tento atribuir a String (stDocName) ao SELECT *
strSQL = "SELECT * from stDocName;"
Abaixo segue o código completo.
'By JPaulo ® Maximo Access
Dim strCaminho As String
Dim Planilha As String
Dim rst As DAO.Recordset, strSQL As String, strLivro As String, xls As Object
Dim stDocName As String
Dim Filtro As String
Dim Filtro1 As String
Dim Filtro2 As String
Dim Filtro3 As String
Dim Filtro4 As String
Dim Filtro5 As String
Dim FiltroFinal As String
Dim strFilter As String
Dim E As String
Planilha = Me.TxtPlanilha
Set xls = CreateObject("Excel.Application")
strCaminho = Me.TxtOrigem
strLivro = strCaminho
E = " And "
stDocName = FiltroTipoRelatorio.Column(2)
Filtro1 = "[Descrição_Obra] like '" & Me.SelectProject & "*'"
Filtro2 = "[Disciplina] like '" & Me.SelectDiscipline & "*'"
Filtro3 = "[Matricula] like '" & Me.SelectWorker & "*'"
Filtro4 = "[Responsabilidade] like '" & Me.SelectRespons & "*'"
Filtro5 = "[Semana]>=" & Nz(Semana_I, 0) & "And [Semana] <= " & Nz(Semana_F, 200000)
If Nz(Filtro) = "" Then
FiltroFinal = Filtro1 & E & Filtro2 & E & Filtro3 & E & Filtro4 & E & Filtro5
Else
FiltroFinal = "(" & Filtro & ")" & E & Filtro1 & E & Filtro2 & E & Filtro3 & E & Filtro4 & E & Filtro5
End If
strFilter = "SELECT * 5000_qry_Relatorio_Time_Sheet_Custos.Filter = FiltroFinal;"
strFilter.FilterOn = True
xls.Workbooks.Open (strLivro)
xls.Visible = True
xls.Worksheets(Planilha).Activate
strSQL = "SELECT * from stDocName;"
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
xls.ActiveSheet.Range("A1").Select
xls.ActiveCell.CopyFromRecordset rst
xls.ActiveWorkbook.Save
xls.Application.Quit
Set xls = Nothing
Neste eu gostaria de além de exportar, eu gostaria de aplicar alguns filtros anteriormente, quanto ao filtro, acho que está funcionando perfeitamente. O problema é quando eu tento usar o SELECT * em uma String, não sei se é possível, mas estou tentando assim:
'1º eu declaro
Dim stDocName As String
'2º Aqui também não possui problema, me retorna o nome da “tabela ou consulta” selecionada no formulário Filtro
stDocName = FiltroTipoRelatorio.Column(2)
'3º O erro ocorre quando tento atribuir a String (stDocName) ao SELECT *
strSQL = "SELECT * from stDocName;"
Abaixo segue o código completo.
'By JPaulo ® Maximo Access
Dim strCaminho As String
Dim Planilha As String
Dim rst As DAO.Recordset, strSQL As String, strLivro As String, xls As Object
Dim stDocName As String
Dim Filtro As String
Dim Filtro1 As String
Dim Filtro2 As String
Dim Filtro3 As String
Dim Filtro4 As String
Dim Filtro5 As String
Dim FiltroFinal As String
Dim strFilter As String
Dim E As String
Planilha = Me.TxtPlanilha
Set xls = CreateObject("Excel.Application")
strCaminho = Me.TxtOrigem
strLivro = strCaminho
E = " And "
stDocName = FiltroTipoRelatorio.Column(2)
Filtro1 = "[Descrição_Obra] like '" & Me.SelectProject & "*'"
Filtro2 = "[Disciplina] like '" & Me.SelectDiscipline & "*'"
Filtro3 = "[Matricula] like '" & Me.SelectWorker & "*'"
Filtro4 = "[Responsabilidade] like '" & Me.SelectRespons & "*'"
Filtro5 = "[Semana]>=" & Nz(Semana_I, 0) & "And [Semana] <= " & Nz(Semana_F, 200000)
If Nz(Filtro) = "" Then
FiltroFinal = Filtro1 & E & Filtro2 & E & Filtro3 & E & Filtro4 & E & Filtro5
Else
FiltroFinal = "(" & Filtro & ")" & E & Filtro1 & E & Filtro2 & E & Filtro3 & E & Filtro4 & E & Filtro5
End If
strFilter = "SELECT * 5000_qry_Relatorio_Time_Sheet_Custos.Filter = FiltroFinal;"
strFilter.FilterOn = True
xls.Workbooks.Open (strLivro)
xls.Visible = True
xls.Worksheets(Planilha).Activate
strSQL = "SELECT * from stDocName;"
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
xls.ActiveSheet.Range("A1").Select
xls.ActiveCell.CopyFromRecordset rst
xls.ActiveWorkbook.Save
xls.Application.Quit
Set xls = Nothing