У меня есть следующий макрос, который принимает строковый аргумент code
, который является запросом SQL, и выполняет его на моем сервере Teradata и отображает результаты.
Dim dest As Range
Set dest = ActiveCell
Dim timestamp As String
timestamp = Format(Now, "yyyyMMdd_h:mm:ss_AM/PM")
Dim queryName As String
queryName = "Query_" & timestamp
ActiveWorkbook.Queries.Add Name:=queryName, formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Odbc.Query(""dsn=my-server-name"", " _
& Chr(34) & code & Chr(34) & ")" & Chr(13) & "" & Chr(10) & "in" & Chr(13) _
& "" & Chr(10) & " Source"
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" _
& queryName & ";Extended Properties=""""" _
, Destination:=Range(dest.Address)).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [" & queryName & "]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = False
.Refresh BackgroundQuery:=False
End With
Для одного отчета япытаясь автоматизировать, первым шагом является запрос определенной метки времени из базы данных и убедитесь, что она показывает сегодняшнюю дату, прежде чем приступить к остальной части отчета.Я хочу, чтобы макрос делал это, но он просто возвращает значение временной метки, а не отображает it-- таким образом я могу записать его в оператор If для условного запуска следующегошаги отчета.
Есть ли способ выполнить запрос и сохранить возвращенную метку времени в переменной, а не отображать ее где-нибудь?В противном случае, я думаю, я просто покажу его где-нибудь, запросу значение, а затем удалю, потому что оно мне не нужно отображать.