none
MS Excell 2007: как в вызов процедуры передать данные из ячеек? RRS feed

  • Вопрос

  • При запросе к внешнему источнику данных нужно из Excell передать два параметра в процедуру.

    {Call list_contacts_closed('param1','param2')}

    Значения param1 и param2 нужно указывать в ячейке Excell. Как ссылаться на ячейки в вызове процедуры?

    вызов вида: {Call list_contracts_closed('$R1C11', '$R1C12')} не проходит.

    • Изменен тип I.Vorontsov 23 августа 2010 г. 5:47
    • Изменен тип I.Vorontsov 30 августа 2010 г. 6:49
    • Перемещено SachinW 2 октября 2010 г. 0:27 MSDN Forums Consolidation (От:SQL Server для разработчиков)
    4 августа 2010 г. 7:16

Ответы

  • У меня установлен офис 2003. В Excel файле иногда создаю запросы к серверу и у меня бывают случаи когда нужно задать какой-либо параметр SQL процедуры. Я решаю эту проблему элементарно с помощью VBA (можно конечно каждый раз зайти в свойство запроса и редактировать вручную, но это слишком не удобно). Думаю, что и в офисе 2007 можно решить эту проблему таким же образом.

    Итак, что для этого надо делать?

    Дайте предметное название запросу к серверу. Например "Sale".

    Далее, следует создать макрос (процедуру VBA). Типовой текст макроса Вы сможете себе скопировать и редактировать под себя:

    Sub ChangeParameterOfQuery()
        Dim strSQL As String
       
        ' Создаём здесь SQL текст запроса
        strSQL = "EXECUTE dbo.p_Test" & vbCrLf & _
            "@Parameter1='" & [A1].Value & "'," & vbCrLf & _
            "@Parameter2='" & [B1].Value & "';"
        ' "vbCrLf" эквивалент выражения "Chr(13) & Chr(10)"
       
        With ActiveSheet.QueryTables("Sale")
            .CommandText = strSQL
            .Refresh BackgroundQuery:=False
        End With
    End Sub

    После всего этого создайте какую-нибудь автофигуру или кнопку в листе (при этом рекомендую в свойстве "Выводить объект на печать" убрать галочку) и назначте вышеуказанный макрос. И всё!

    Надеюсь мой ответ удовлетворит Вас.

    Удачи!!!

    • Помечено в качестве ответа I.Vorontsov 30 августа 2010 г. 6:49
    29 августа 2010 г. 7:06