0

ADO ライブラリを使用して SQL ステートメントで動作するマクロを作成しようとしましたが、実際には 6559 レコードしか返されませんでしたが、テーブルの 1 つには 72k レコードがありました。なんで?

最近、実際に私のコードは 6559 を返さず、行番号 - 65537 を返すことに気付きました。そのため、シートの行数を 72092 に減らすと、行数も少なくなります (6550)。

私が気付いたもう 1 つのことは、rs.RecordCount が "-1" を返すことです。

これが私のサブプロシージャのコードです。これには、SQL ステートメント (sqlstmt)、宛先シート名 (sheet_name)、および宛先範囲 (destination1) の 3 つのパラメーターがあります。

'subprocedure that execute sql statements and save resault in given worksheet
    Public Sub sql_query(ByVal sqlstmt As String, ByVal sheet_name As String, ByVal destination1 As String)

        Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim connstring As String
        Dim qt As QueryTable
        Dim tw_path As String
        Dim is_name As Boolean
        Dim sh As Worksheet

        '''making sheet if it doesn't exist
        is_name = False
        For Each sh In ThisWorkbook.Worksheets
            If sh.Name = sheet_name Then is_name = True
        Next
        If is_name = False Then ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).Name = sheet_name

        ''' connection
        tw_path = ThisWorkbook.path & "\" & ThisWorkbook.Name
        connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tw_path & ";Extended Properties=Excel 8.0;Persist Security Info=False"

        Set conn = New ADODB.Connection
        conn.ConnectionString = connstring
        conn.Open

        '''executing statement
        Set rs = New ADODB.Recordset
        rs.Source = sqlstmt
        rs.ActiveConnection = conn
        rs.Open

        '''saving records
        ThisWorkbook.Worksheets(sheet_name).Activate
        Set qt = Worksheets(sheet_name).QueryTables.Add(Connection:=rs, Destination:=Range(destination1))
        qt.Refresh

        '''end
        If rs.State <> adStateClosed Then rs.Close
        conn.Close
        If Not rs Is Nothing Then Set rs = Nothing
        If Not conn Is Nothing Then Set conn = Nothing
        Set qt = Nothing

        End Sub

手伝ってくれてありがとう

4

1 に答える 1

0

Excel 2003 またはそれ以前のバージョンを使用していると思います。この場合、ワークシートの最大行数は 65,536 行です。これを回答ではなくコメントに入れましたが、コメントできる担当者が1人不足しています:(。申し訳ありません

于 2013-04-15T05:01:27.520 に答える