2016-06-16 6 views
0

Я успешно потянув данных в Excel с помощью запросов SQL, отформатированные как и в VBA:Изменение параметров хранимая процедура в Excel/VBA

.Open "exec sp_MyProcedure @Node_Id = 05,@Subsidiary_Cd = '1',@WeekEndDate = '2016-05-28', @JobType = '12',@ReportLevel = 4" 

Я хотел бы, чтобы либо пользователь мог ввести самую последнюю неделю конечную дату , который изменит параметр @WeekEndDate на их запись или будет иметь ячейку, отображающую самую последнюю дату окончания недели, без необходимости ввода пользователя (если это возможно?) Все остальные параметры остаются неизменными. Я новичок в vba и не имею большой опыт работы в excel для любой помощи.

** Можно отредактировать вопрос, если требуется больше данных

ответ

0

Рассмотрим это:

Dim NodeId, SubsidiaryCd, WeekEndDate, JobType, ReportLevel 

NodeId = 05 
SubsidiaryCd = "1" 
WeekEndDate = "2016-05-28" 
JobType = "12" 
ReportLevel = 4 

.Open "exec sp_MyProcedure " & _ 
    "@Node_Id = " & NodeId & "," & _ 
    "@Subsidiary_Cd = '" & SubsidiaryCd & "'," & _ 
    "@WeekEndDate = '" & WeekEndDate & "', " & _ 
    "@JobType = '" & JobType & "'," & _ 
    "@ReportLevel = " & ReportLevel 

Это точно так же, как и предыдущие инструкции; теперь нужно просто изменить значение константы для переменной WeekEndDate к нужной дате, как:

WeekEndDate = Format(Date(), "yyyy-mm-dd") 
0

Во-первых, это зависит от того, что вы считаете последний день данной недели. Для моего теста я предполагаю субботу.

Во-вторых, я предполагаю, что на «самой текущей неделе» вы подразумеваете последнюю ПОЛНУЮ неделю (как и в ту неделю, в которой мы сейчас находимся).

В-третьих, я предполагаю, что фрагмент кода, который вы включили, является SQL, который вы интегрировали в свой код VBA.

Итак, если у вас есть =TODAY() в ячейке A1, вы можете поместить следующую формулу в ячейке A2, а затем изменить VBA фрагмент кода на следующее:

формула: =A1-WEEKDAY(A1)

.Open "exec sp_MyProcedure @Node_Id = 05,@Subsidiary_Cd = '1',@WeekEndDate = '" & ActiveSheet.Cells(2, 1).Value & "', @JobType = '12',@ReportLevel = 4" 

Отсюда, вы можете следовать той же идее, чтобы настроить все параметры в вашей процедуре.

+0

Вы предположения верны, однако после изменения моего кода я получаю «преобразование данных типа varchar в smalldatetime». Smalldatetime - это мой тип данных в sql, любые идеи, как это исправить? – agfila

+0

Вам нужно будет добавить время в поле даты, либо в Excel, либо вручную в VBA. Вероятно, возможно, он был дефолтом до полуночи –