Как прокомментировал Шон Ланге, оператор вставки не возвращает ничего полезного, кроме подтверждения состояния результата запроса, поэтому он ошибается или нет.
Согласно sql-коду, я предполагаю, что вы запрашиваете противSQL-сервер, не имеющий доступа к БД с необходимыми правами доступа, достаточно справедливо использует tempdb :-).
Но проблема в вашем коде состоит в том, что только последняя часть, начиная споследний StrQry, а именно тот, с вашим "Вставить в ...", пока "Sheets (1) .Range ...." не окажет никакого влияния.Другие предыдущие назначения StrQry просто перезаписываются последними.
Вашу проблему с этими многими продолжениями можно обойти, просто удалив их, где это возможно, в соответствии с синтаксисом T-SQL и сделайте длинные строки в качестве SQL-Server обрабатывает строки кода самостоятельно.
Таким образом, код может выглядеть следующим образом
Sub VBAFromSQL()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim StrQuery As String
ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=HIDDEN_Outputs;Data Source=HIDDEN;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False"
cnn.Open ConnectionString
cnn.CommandTimeout = 900
StrQuery = "IF OBJECT_ID('tempdb..#temp_MthToDt') IS NOT NULL drop table #temp_MthToDt; IF OBJECT_ID('tempdb..#temp_ImprtSampVol') IS NOT NULL drop table #temp_ImprtSampVol; IF OBJECT_ID('tempdb..#temp_T1') IS NOT NULL drop table #temp_T2AuditData; DECLARE @Last_Day_Loaded VARCHAR(30) = '2018-10-03', @Start_of_Sample VARCHAR(30) = '2018-10-03',@End_of_Sample VARCHAR(30) = '2018-10-03', @Days_Data_so_far INT = 03,@First_Day_Month VARCHAR(30) = '2018-10-01',@Working_Days_in_Month INT = 23,@Days_in_Month INT = 31,@BBE_Sample_Minimum INT = 10,@BBE_Sample_adjustment_multiplier decimal(5,2) = 1.0; CREATE TABLE #temp_ImprtSampVol (CIS VARCHAR(10) NOT NULL,RD VARCHAR(40) NOT NULL,Sample_to_send INT NOT NULL );INSERT INTO #temp_ImprtSampVol Values ('RBM','Care: Admin',28),('RRA','Care: Quality',29);"
rst.Open StrQuery, cnn
Sheets(1).Range("A2").CopyFromRecordset rst
End Sub
Что мне не ясно, это то, что вы ожидали от оператора вставки, который будет доставлен, ипоказано в листе А2.Если вы хотите показать вставленные строки, вы должны добавить либо
;select * from #temp_ImprtSampVol;
, либо
output inserted.*;
в конце StrQry.Помните о пропавшем ";"перед «выводом», так как он принадлежит оператору вставки.