![](http://sqlserver.work/wp-content/themes/cocoon-master/images/b-woman.png)
この記事では
・Excel(VBA)からSQL Serverの
・ストプロ(引数あり)を実行する方法
を記載します!
![](http://sqlserver.work/wp-content/themes/cocoon-master/images/b-woman.png)
今回は
・認証方法に「Windows 認証」
・ADOを使用
・Microsoft OLE DB Driver for SQL Serverを使用
します!
※「Microsoft OLE DB Driver for SQL Server」は「OLE DBドライバー」です。
サンプルプログラムの概要
VBAから
・引数として文字列を渡して
・ストプロ「SampleProcedure」を実行(引数あり)
します。
ストプロを作成
ここでは例として、
・引数として文字列をもらって
・テーブル「tableA」へレコードをINSERTするストプロ「SampleProcedure」
を作成します。
![テーブル「tableA」](https://sqlserver.work/wp-content/uploads/2021/07/stpro_vba_hikisu_001.png)
--DB名を設定
USE [sampleDB]
GO
CREATE OR ALTER PROCEDURE SampleProcedure
--引数
@message VARCHAR(50)
AS
--tableAへレコードをINSERT
INSERT INTO tableA VALUES(@message,GETDATE())
RETURN
GO
![作成したストプロ「SampleProcedure」](https://sqlserver.work/wp-content/uploads/2021/07/stpro_vba_hikisu_002.png)
VBAを作成
ここでは例として、
・上記で作成したストプロ「SampleProcedure」を実行
します。
Option Explicit
Sub execSqlToSqlServer()
'===============================
'接続文字列
'===============================
'プロバイダ
Const PROVIDER As String = "MSOLEDBSQL"
'サーバー名(サーバーのPC名\インスタンス名)
Const SERVER_NAME As String = "localhost\SQLEXPRESS"
'DB名
Const DB_NAME As String = "sampleDB"
'ユーザー名
Const USER_NAME As String = "XXXXX"
'パスワード
Const PASSWORD As String = "XXXXX"
'ストプロ名
Const STORED_PROC As String = "SampleProcedure"
Dim con As Object
Dim conStr As String
Dim command As Object
Dim commandParameter As Object
Dim errorMessage As String
On Error GoTo conError
'===============================
'SQL Serverへ接続(Windows認証)
'===============================
'接続文字列の組み立て
conStr = "Provider=" & PROVIDER & ";" & _
"Data Source='" & SERVER_NAME & "';" & _
"Initial Catalog='" & DB_NAME & "';" & _
"Integrated Security=SSPI;" & _
"DataTypeCompatibility=80;"
'===============================
'SQL Serverへ接続(SQL Server認証)
'===============================
' conStr = "Provider=" & PROVIDER & ";" & _
' "Data Source=" & SERVER_NAME & ";" & _
' "Initial Catalog=" & DB_NAME & ";" & _
' "User ID=" & USER_NAME & ";" & _
' "Password=" & PASSWORD & ";" & _
' "DataTypeCompatibility=80;"
'オープン
Set con = CreateObject("ADODB.Connection")
con.Open conStr
On Error GoTo execStoproError
Set command = CreateObject("ADODB.Command")
'===============================
'ストプロのパラメーターを設定
'===============================
Set commandParameter = command.CreateParameter()
With commandParameter
'引数名
.Name = "message"
'型を指定
'┗VARCHAR:200
'┗DECIMAL:14
'┗DOUBLE :5
.Type = 200
'桁数
.Size = 50
'パラメータの方向
'┗入力:1
'┗出力:2
.Direction = 1
'値
.Value = "VBAからストプロ実行"
End With
command.Parameters.Append commandParameter
'===============================
'ストプロを実行
'===============================
With command
.ActiveConnection = con
'コマンドの種類を指定
'┗SQL :1
'┗ストプロ:4
.CommandType = 4
.CommandText = STORED_PROC
.Execute
End With
MsgBox "ストプロを実行しました!"
'===============================
'後片付け
'===============================
con.Close
Set commandParameter = Nothing
Set command = Nothing
Set con = Nothing
Exit Sub
conError:
'===============================
'後片付け
'===============================
Set con = Nothing
errorMessage = "接続でエラーが発生しました。" & vbCrLf & vbCrLf & _
"●エラー番号" & vbCrLf & Err.Number & vbCrLf & vbCrLf & _
"●エラー内容" & vbCrLf & Err.Description & vbCrLf
MsgBox errorMessage, vbCritical
Exit Sub
execStoproError:
'===============================
'後片付け
'===============================
con.Close
Set commandParameter = Nothing
Set command = Nothing
Set con = Nothing
errorMessage = "ストプロの実行でエラーが発生しました。" & vbCrLf & vbCrLf & _
"●エラー番号" & vbCrLf & Err.Number & vbCrLf & vbCrLf & _
"●エラー内容" & vbCrLf & Err.Description & vbCrLf
MsgBox errorMessage, vbCritical
Exit Sub
End Sub
結果
Excel(VBA)を使用して、SQL Serverのストプロ(引数あり)を実行できました。
![VBAから出力させている正常終了メッセージ](https://sqlserver.work/wp-content/uploads/2021/07/stpro_vba_hikisu_003.png)
![テーブル「tableA」にINSERTされたレコード](https://sqlserver.work/wp-content/uploads/2021/07/stpro_vba_hikisu_004.png)
参考①
上記のVBAコードで使用している以下の詳細については、公式サイトをご確認ください。
●CreateObject(“ADODB.Connection”)
●CreateObject(“ADODB.Command”)
●CreateParameterメソッド
参考②
Excel(VBA)を使用して、SQL ServerへSQLを実行することもできます。
詳細は以下の記事をご確認ください。