Prezados, boa tarde!
Como estão todos?
Depois de muito tempo quebrando a cabeça, percebi que de fato estou muito enferrujado para resolver minhas próprias dúvidas.
A Macro em tese é muito simples, eu preciso executar uma consulta no SQL e essa consulta vai me retornar uma tabela de dados. O porém é, esta consulta tem vários subselects com contas e tudo mais. E no final, esta dando um erro chamado "Erro de Sintaxe SQL".
A consulta esta correta, se eu tento rodar a mesmo dentro do SQL Server tudo funciona perfeitamente. porém no EXCEL, Não!
Toda mascara dessa planilha eu peguei de um modelo que funciona para outras consultas mais simples, esta na verdade é a primeiro consulta mais complexa que tento "automatizar". Vejam se podem me ajudar a resolver o problema.
Código Select do SQL
Select distinct
LEFT(tT.SACA_ID,8) as [Raiz]
, (Select distinct top 1 tbSACA.NOME from tbSACA where LEFT(tbSACA.SACA_ID, 8) = LEFT(tT.SACA_ID,8)) as [Nome]
, SUM(CASE when DATEDIFF(day, tT.DATA_DEPO, tT.DATA_PAGO) < 6 and tB.BAIX_CADA_DETA_ID in ('PG BCO', 'PG SAC')
then VALO_TITU_ORIG ELSE 0 END) / SUM(CASE when tB.BAIX_CADA_DETA_ID is not null
then VALO_TITU_ORIG ELSE 1 END) [Liq_5 dias]
, SUM(CASE when tB.BAIX_CADA_DETA_ID is null and DATA_DEPO < convert(date,GETDATE()) then VALO_TITU_ORIG ELSE 0 END) [Vencidos]
, SUM(CASE when tB.BAIX_CADA_DETA_ID is null and DATEDIFF(day, DATA_DEPO, convert(date,GETDATE())) > 10 then VALO_TITU_ORIG ELSE 0 END) [Vencidos > 10]
, SUM(CASE when DATA_INCL < convert(date,GETDATE()) then VALO_TITU_ORIG * NUME_DIAS ELSE 0 end) / SUM(CASE when DATA_INCL < convert(date,GETDATE()) then VALO_TITU_ORIG ELSE 1 end) [PzMedio]
, SUM(CASE when DATA_INCL < convert(date,GETDATE()) and tB.BAIX_CADA_DETA_ID is null then VALO_TITU_ORIG ELSE 0 end) [A vencer]
, SUM(CASE when tT.DATA_INCL < convert(date,GETDATE()) then VALO_TITU_ORIG ELSE 0 end) [Vol Processado]
from tbTitu tT
left join tbTITU_TARI_BAIX tB on tT.TITU_ID = tB.TITU_ID
group by LEFT(tT.SACA_ID, 8)
Segue o código do VBA
Private Sub teste()
Sheets("Plan1").Select
ActiveSheet.Cells.Clear
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"ODBC;DSN=;UID=sa;PWD=;DATABASE=db" _
, Destination:=Range("Plan1!$A$1")).QueryTable
'UID= login sql, PWD = senha sql, = DATABASE = Banco de dados.
'Select dentro da base SQL
.CommandText = Array( _
"Select distinct", _
"LEFT(tT.SACA_ID, 8) As Raiz ", _
", (Select distinct top 1 tbSACA.NOME from tbSACA where LEFT(tbSACA.SACA_ID, 8) = LEFT(tT.SACA_ID,8)) as [Nome] ", _
", SUM(CASE when DATEDIFF(day, tT.DATA_DEPO, tT.DATA_PAGO) < 6 and tB.BAIX_CADA_DETA_ID in ('PG BCO', 'PG SAC') ", _
"then VALO_TITU_ORIG ELSE 0 END) / SUM(CASE when tB.BAIX_CADA_DETA_ID is not null ", _
"then VALO_TITU_ORIG ELSE 1 END) [Liq_5 dias] ", _
", SUM(CASE when tB.BAIX_CADA_DETA_ID is null and DATA_DEPO < convert(date,GETDATE()) then VALO_TITU_ORIG ELSE 0 END) [Vencidos] ", _
", SUM(CASE when tB.BAIX_CADA_DETA_ID is null and DATEDIFF(day, DATA_DEPO, convert(date,GETDATE())) > 10 then VALO_TITU_ORIG ELSE 0 END) [Vencidos > 10] ", _
", SUM(CASE when DATA_INCL < convert(date,GETDATE()) then VALO_TITU_ORIG * NUME_DIAS ELSE 0 end) / SUM(CASE when DATA_INCL < convert(date,GETDATE()) then VALO_TITU_ORIG ELSE 1 end) [PzMedio] ", _
", SUM(CASE when DATA_INCL < convert(date,GETDATE()) and tB.BAIX_CADA_DETA_ID is null then VALO_TITU_ORIG ELSE 0 end) [A vencer] ", _
", SUM(CASE when tT.DATA_INCL < convert(date,GETDATE()) then VALO_TITU_ORIG ELSE 0 end) [Vol Processado] ", _
"from tbTitu tT ", _
"left join tbTITU_TARI_BAIX tB on tT.TITU_ID = tB.TITU_ID ", _
"group by LEFT(tT.SACA_ID, 8)")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Tabela_PNL_RendaFixa"
.Refresh BackgroundQuery:=False
End With
Application.DisplayAlerts = False
End Sub
Agradeço desde já, abs!
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 30/07/2018 2:48 pm