現在、今後のプロジェクトでSQL Server Management StudioからExcelにデータをエクスポートする方法をテストしています。VBAを使用してSQL ServerデータをExcelにエクスポートする方法は?
私はオンライン見上げると、次のようにコードに出くわしました:私はマクロを使用しようとするとImportSQLtoRangeにケース1に設定され
Function ImportSQLtoRange(ByVal conString As String, ByVal query As String, ByVal target As Range) As Integer
On Error Resume Next
' Object type and CreateObject function are used instead of ADODB.Connection,
' ADODB.Command for late binding without reference to
' Microsoft ActiveX Data Objects 2.x Library
' ADO API Reference
' http://msdn.microsoft.com/en-us/library/ms678086(v=VS.85).aspx
' Dim con As ADODB.Connection
Dim con As Object
Set con = CreateObject("ADODB.Connection")
con.ConnectionString = conString
' Dim cmd As ADODB.Command
Dim cmd As Object
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = query
cmd.CommandType = 1 ' adCmdText
' The Open method doesn't actually establish a connection to the server
' until a Recordset is opened on the Connection object
con.Open
cmd.ActiveConnection = con
' Dim rst As ADODB.Recordset
Dim rst As Object
Set rst = cmd.Execute
If rst Is Nothing Then
con.Close
Set con = Nothing
ImportSQLtoRange = 1
Exit Function
End If
Dim ws As Worksheet
Dim col As Integer
Set ws = target.Worksheet
' Column Names
For col = 0 To rst.Fields.Count - 1
ws.Cells(target.row, target.Column + col).Value = rst.Fields(col).Name
Next
ws.Range(ws.Cells(target.row, target.Column), ws.Cells(target.row, target.Column + rst.Fields.Count)).Font.Bold = True
' Data from Recordset
ws.Cells(target.row + 1, target.Column).CopyFromRecordset rst
rst.Close
con.Close
Set rst = Nothing
Set cmd = Nothing
Set con = Nothing
ImportSQLtoRange = 0
End Function
Sub TestImportUsingADO()
Dim conString As String
conString = "data source = server name; initial catalog = database; uid = name; password = password"
Dim query As String
query = "my query goes here"
Dim target As Range
Set target = ThisWorkbook.Sheets(2).Cells(3, 2)
target.CurrentRegion.Clear
Select Case ImportSQLtoRange(conString, query, target)
Case 1
MsgBox "Import database data error", vbCritical
Case Else
End Select
End Sub
は、私がメッセージボックスが表示されます。しかし、コードが動作し、クエリにアクセスできることを意味するのか、それともエラーメッセージであるのかは分かりません。これが動作していることがわかったら、私はそれを変更して私のクエリに基づいてテーブルを私に与えますか?
編集:カジミエシュヤヴォルの提案を以下の時に、私は
On Error Resume Next
についてコメントし、次のように今、私はエラーを取得する:
クリックデバッグエラーが
から来る示してcon.open
それはどういう意味ですか?
コメントは 'next'ラインを再開すると、あなたは正確にそれが生産されている行でエラーが発生します。次に、エラーに関する詳細情報を提供します。エラー番号、エラー名、発生した行 –
は整数ではなくレコードセットを返し、関数セットを最初のレコードセットに設定します。 –
エラーは、接続文字列が機能しないことを示します。 – itsLex