Добрый день! Подскажите, возможно ли провернуть такое дело: Есть файл excel. В ячейку(Например А1) вводится дата. Необходимо дату из этой ячейки использовать в выполнении процедуры exec МояПроцедура(Дата(из А1)). Далее эта процедура выполняется на сервере. И необходимо обновить все подключения в книге. Весь макрос привязать к кнопке.
Добрый день! Подскажите, возможно ли провернуть такое дело: Есть файл excel. В ячейку(Например А1) вводится дата. Необходимо дату из этой ячейки использовать в выполнении процедуры exec МояПроцедура(Дата(из А1)). Далее эта процедура выполняется на сервере. И необходимо обновить все подключения в книге. Весь макрос привязать к кнопке.Lania
В процедуре создаете переменную для даты, например "DT", вносите а нее дату из ячейки А1 - DT = Range("A1"), и используете эту переменную в процедуре.
В процедуре создаете переменную для даты, например "DT", вносите а нее дату из ячейки А1 - DT = Range("A1"), и используете эту переменную в процедуре.Wasilich
Я с макросами только начинаю разбираться. Получается с помощью макроса процедура должна запускаться, так как мне нужно использовать в качестве параметра процедуры значение из ячейки. Если это можно сделать без макроса, то было бы замечательно. Вызванная процедура выполняет sql-запрос, который заполняет таблицу в базе. После чего в PowerPivot загружаются данные из этой таблицы.
Я с макросами только начинаю разбираться. Получается с помощью макроса процедура должна запускаться, так как мне нужно использовать в качестве параметра процедуры значение из ячейки. Если это можно сделать без макроса, то было бы замечательно. Вызванная процедура выполняет sql-запрос, который заполняет таблицу в базе. После чего в PowerPivot загружаются данные из этой таблицы.Lania
Доброе время суток Тема по взятию параметров запросов из ячеек листа достаточно подробно обсуждалась Получение данных из SQL по условию в ячейках. Этот же подход применим и к параметрам хранимых процедур. Успехов.
Доброе время суток Тема по взятию параметров запросов из ячеек листа достаточно подробно обсуждалась Получение данных из SQL по условию в ячейках. Этот же подход применим и к параметрам хранимых процедур. Успехов.anvg
Доброе время суток Microsoft Query - средство для выполнения SQL-запросов к источникам данных через ODBC и создания постоянного подключения и вывод результата на лист Excel, практически не изменяется с Excel 97. Power Query - это функциональный язык программирования, принимающий внешние данные как таблицы, обрабатывающий их и возвращающий на лист таблицу, как результат выполнения запроса. Можно с его помощью получать данные с различных баз данных, причём с различных в рамках одного результирующего запроса с требуемой обработкой. Но это не SQL. В Excel появился как надстройка к 2010 Pro Plus SP1.
Доброе время суток Microsoft Query - средство для выполнения SQL-запросов к источникам данных через ODBC и создания постоянного подключения и вывод результата на лист Excel, практически не изменяется с Excel 97. Power Query - это функциональный язык программирования, принимающий внешние данные как таблицы, обрабатывающий их и возвращающий на лист таблицу, как результат выполнения запроса. Можно с его помощью получать данные с различных баз данных, причём с различных в рамках одного результирующего запроса с требуемой обработкой. Но это не SQL. В Excel появился как надстройка к 2010 Pro Plus SP1.anvg
krosav4ig, Спасибо. это почти то что нужно. Но мне надо, чтобы процедура выполнялась, но вывод данных не нужен.а без вывода данных этот метод не работает(
krosav4ig, Спасибо. это почти то что нужно. Но мне надо, чтобы процедура выполнялась, но вывод данных не нужен.а без вывода данных этот метод не работает(Lania
Lania, тогда остается 2 варианта: 1 переписать определение процедуры 2 воспользоваться макросом
[vba]
Код
Option Explicit
Public Sub ExecStoredProc(dDate As Date) Const strServerName$ = "ServerName", _ strDBName$ = "DBName", _ strUser$ = "User", strPass$ = "Pass" Const adAsyncExecute& = 16, _ adStateOpen& = 1, _ adStateExecuting& = 4 With CreateObject("ADODB.Connection") .Open Join(Array( _ "DRIVER=SQL Server", _ "SERVER=" & strServerName, _ "UID=" & strUser, _ "password=" & strPass, _ "APP=2013 Microsoft Office system", _ "WSID=" & Environ$("computername"), _ "DATABASE=" & strDBName), ";") .Execute "exec МояПроцедура '" & Format(dDate, "yyyy-mm-dd") & "'", , _ adAsyncExecute Do While .State = (adStateOpen Or adStateExecuting) DoEvents Loop .Close End With 'ThisWorkbook.RefreshAll 'обновление всех подключений End Sub
[/vba]
[vba]
Код
Option Explicit
Private Sub CommandButton1_Click() ExecStoredProc [A1] End Sub
[/vba]
в ячейке может быть дата как в числовом формате, так и в текстовом, в текстовом формате дата распознается в форматах "дд.мм.гггг", "д.м.гг" вместо точек может быть пробел, запятая, слэш (/), дефис, так же распознается дата при написании месяца текстом в полной и сокращенной фррме (1 января 16, 1 янв 2016), если не указан год (как в примере) то берется текущий
Lania, тогда остается 2 варианта: 1 переписать определение процедуры 2 воспользоваться макросом
[vba]
Код
Option Explicit
Public Sub ExecStoredProc(dDate As Date) Const strServerName$ = "ServerName", _ strDBName$ = "DBName", _ strUser$ = "User", strPass$ = "Pass" Const adAsyncExecute& = 16, _ adStateOpen& = 1, _ adStateExecuting& = 4 With CreateObject("ADODB.Connection") .Open Join(Array( _ "DRIVER=SQL Server", _ "SERVER=" & strServerName, _ "UID=" & strUser, _ "password=" & strPass, _ "APP=2013 Microsoft Office system", _ "WSID=" & Environ$("computername"), _ "DATABASE=" & strDBName), ";") .Execute "exec МояПроцедура '" & Format(dDate, "yyyy-mm-dd") & "'", , _ adAsyncExecute Do While .State = (adStateOpen Or adStateExecuting) DoEvents Loop .Close End With 'ThisWorkbook.RefreshAll 'обновление всех подключений End Sub
[/vba]
[vba]
Код
Option Explicit
Private Sub CommandButton1_Click() ExecStoredProc [A1] End Sub
[/vba]
в ячейке может быть дата как в числовом формате, так и в текстовом, в текстовом формате дата распознается в форматах "дд.мм.гггг", "д.м.гг" вместо точек может быть пробел, запятая, слэш (/), дефис, так же распознается дата при написании месяца текстом в полной и сокращенной фррме (1 января 16, 1 янв 2016), если не указан год (как в примере) то берется текущийkrosav4ig