2017-12-04 4 views
0

現在、今後のプロジェクトで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 

についてコメントし、次のように今、私はエラーを取得する:

enter image description here

クリックデバッグエラーが

から来る示して
con.open 

それはどういう意味ですか?

+0

コメントは 'next'ラインを再開すると、あなたは正確にそれが生産されている行でエラーが発生します。次に、エラーに関する詳細情報を提供します。エラー番号、エラー名、発生した行 –

+0

は整数ではなくレコードセットを返し、関数セットを最初のレコードセットに設定します。 –

+0

エラーは、接続文字列が機能しないことを示します。 – itsLex

答えて

1

以下のコードの下に

Dim conn As New ADODB.Connection 
Dim conn As ADODB.Connection 
Set conn = New ADODB.Connection 

を使用してみてください例です。このようにそれをやっについてどのように

Sub GetDataFromADO() 
'Declare variables' 
    Set objMyConn = New ADODB.Connection 
    Set objMyRecordset = New ADODB.Recordset 
    Dim strSQL As String 

'Open Connection' 
    objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;" 
    objMyConn.Open 

'Set and Excecute SQL Command' 
    strSQL = "select * from myTable" 

'Open Recordset' 
    Set objMyRecordset.ActiveConnection = objMyConn 
    objMyRecordset.Open strSQL    

'Copy Data to Excel' 
    Do until objMyRecordset.EOF //Test whether the current record is after the last record 
      'Your Code 
    Loop 

End Sub 
+0

回答を探すことができます[ここ](https://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm) –

+0

皮肉なことに、それは私がからのコード。しかし、私はそれを動作させるためにどの部分を変更する必要があるのか​​分かりません... – hjh93

+0

私が解決策に投稿したものを試しました –

0

Sub GetDataFromADO() 

    'Declare variables' 
     Set objMyconn = New ADODB.Connection 
     Set objMyCmd = New ADODB.Command 
     Set objMyRecordset = New ADODB.Recordset 
     Dim rc As Long 

    'Open Connection' 
     objMyconn.ConnectionString = "Provider=SQLOLEDB;Data Source=Your_Server_Name;Initial Catalog=Your_DB_Name; Integrated Security=SSPI;" 

     objMyconn.Open 

    'Set and Excecute SQL Command' 
     Set objMyCmd.ActiveConnection = objMyconn 
     objMyCmd.CommandText = "select * from [Person].[BusinessEntity] " 
     objMyCmd.CommandType = adCmdText 
     objMyCmd.Execute 

    'Open Recordset' 
     Set objMyRecordset.ActiveConnection = objMyconn 
     objMyRecordset.Open objMyCmd 

    'Copy Data to Excel' 
     'ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset) 
     Application.ActiveCell.CopyFromRecordset (objMyRecordset) 
     rc = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
     ActiveSheet.Cells(rc + 1, 1).Select 
     'Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Value 
     objMyconn.Close 

End Sub 

ExcelとSQL Serverの統合に関するヒントは、以下のリンクからご覧いただけます。エラーの

https://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm

関連する問題