2

以下は私のコードで、正常に動作していますが、小さな問題があります。

2 つの異なるシートがあります。最初のシートには、データを取得するためのボタンがあります。これは機能しています。2 番目のシートにデータが表示されます。しかし、問題はテーブル ヘッダーを取得することです。私のコードはヘッダーを取得できません。

    Sub Add_Results_Of_ADO_Recordset() 
     'This was set up using Microsoft ActiveX Data Components version 2.8

    Dim cnt As ADODB.Connection 
    Dim rst As ADODB.Recordset 
    Dim stSQL As String 
    Dim wbBook As Workbook 
    Dim wsSheet As Worksheet 
    Dim rnStart As Range 


    Const stADO As String = "PROVIDER=SQLOLEDB.1;SERVER=192.168.0.300;UID=sa;PWD=sa;DATABASE=sa" 

    'where BI is SQL Database & AURDWDEV01 is SQL Server

    Set wbBook = ActiveWorkbook 
    Set wsSheet = wbBook.Worksheets(1) 

    With wsSheet 
        Set rnStart = .Range("A1") 
    End With 

    stSQL = "SELECT sModel,sKodu,sAciklama FROM tbstok " 

    Set cnt = New ADODB.Connection 

    With cnt 
        .CursorLocation = adUseClient 
        .Open stADO 
        .CommandTimeout = 0 
        Set rst = .Execute(stSQL) 
    End With 

     'Here we add the Recordset to the sheet from A1
    rnStart.CopyFromRecordset rst 

     'Cleaning up.
    rst.Close 
    cnt.Close 
    Set rst = Nothing 
    Set cnt = Nothing 

End Sub
4

1 に答える 1

2

へへ。私自身のコードとほとんど同じように見えるコードを変更するのは奇妙に感じます:)
これにより、ヘッダーが作成されます

Dim i As Long
With rst
    For i = 1 To .Fields.Count
        wsSheet.Cells(1, i) = .Fields(i - 1).Name
    Next i
End With

これにより、A2から始まる範囲が貼り付けられます

rnStart.CopyFromRecordset rst

rnStart は、レコードセットの貼り付けを開始する最初のセルとして A2 に設定する必要があります。

Option Explicit

Sub Add_Results_Of_ADO_Recordset()
     'This was set up using Microsoft ActiveX Data Components version 2.8

    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim stSQL As String
    Dim wbBook As Workbook
    Dim wsSheet As Worksheet
    Dim rnStart As Range


    Const stADO As String = "PROVIDER=SQLOLEDB.1;SERVER=192.168.0.300;UID=sa;PWD=sa;DATABASE=sa"

    'where BI is SQL Database & AURDWDEV01 is SQL Server

    Set wbBook = ActiveWorkbook
    Set wsSheet = wbBook.Worksheets(1)

    With wsSheet
        Set rnStart = .Range("A2")
    End With

    stSQL = "SELECT sModel,sKodu,sAciklama FROM tbstok "

    Set cnt = New ADODB.Connection

    With cnt
        .CursorLocation = adUseClient
        .Open stADO
        .CommandTimeout = 0
        Set rst = .Execute(stSQL)
    End With

    ' headers
    Dim i As Long
    With rst
     For i = 1 To .Fields.Count
         wsSheet.Cells(1, i) = .Fields(i - 1).Name
     Next i
    End With

    ' add recordset starting at A2
    rnStart.CopyFromRecordset rst

     'Here we add the Recordset to the sheet from A2
    rnStart.CopyFromRecordset rst

     'Cleaning up.
    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing

End Sub
于 2013-06-12T09:27:07.980 に答える