Создайте таблицу в таблице Excel и добавьте строки в таблицу с циклом SQL - PullRequest
0 голосов
/ 16 февраля 2020

В Excel vba я запускаю SQL в a для l oop и хочу, чтобы результат SQL в l oop был добавлен в виде таблицы в мою таблицу Excel. пример кода приведен ниже. Поэтому приведенный ниже код просто проверяет активность пользователя между двумя датами. Мне нужно, чтобы эти данные были представлены в виде таблицы с Excel vba.

    Sub activity_count

    Dim x as date
    Dim start_date as date
    Dim End_date as date
    Dim rsResult as object
    Dim strSql as string

    for x=start_date to end_date

    Set rsResult =CreateObject("ADODB.Recordset")

    strSQL="select logdate, username, activity_count from table where logdate='"&start_date
    strSQL= strSQL & "'"
    strSQL=strSQL & ";"

    Call Logon
    rsResult.Open strSQL, Conn

    'with your help ,I need the code to write this data in same excel sheet in the form of table.

    rsResult.close
    Set rsResult=nothing
    Set Conn=nothing
    strSQL=""

    start_date=DateAdd("d",1,start_date)

    next
end sub

1 Ответ

0 голосов
/ 17 февраля 2020

Так как это является частью большей процедуры отчета, создайте соединение db в начале скрипта, передайте его в качестве параметра всем другим частям, которые в нем нуждаются, а затем отключите в конце. Не уверен, почему вы хотите получать записи по одной дате, когда функция BETWEEN делает это в одном операторе. Например


    Option Explicit
    Sub bigreport()

       Dim conn As ADODB.Connection
       Call Logon  ' establish the connection conn

       ' create activity table
       ' db connection, start_date, end_date , results sheet, table position
       Call activity_count(conn, "01/01/2020", "01/02/2020", "Sheet3", "B2")

       conn.Close
       Set conn = Nothing

    End Sub

    Sub activity_count(conn As ADODB.Connection, start_date As Date, end_date As Date, _
                        sheet_name As String, table_posn As String)

        Dim cmd As ADODB.Command, strSQL As String

        ' query
        strSQL = " SELECT logdate, username, activity_count " & _
                 " FROM Table_1 " & _
                 " WHERE logdate BETWEEN ? AND ? " & _
                 " ORDER BY logdate, username "

        ' parameters
        Dim p1 As String, p2 As String
        p1 = Format(start_date, "yyyy-mm-dd")
        p2 = Format(end_date, "yyyy-mm-dd")
        'Debug.Print p1, p2

        Set cmd = New ADODB.Command
        With cmd
            .ActiveConnection = conn
            .CommandText = strSQL
            .CommandType = 1 'adCmdText
            .Parameters.Append .CreateParameter("P1", adVArChar, 1, 10, p1) '
            .Parameters.Append .CreateParameter("P2", adVArChar, 1, 10, p2) ' adParamInput = 1
        End With

        'run query
        Dim rsResult As ADODB.Recordset
        Set rsResult = cmd.Execute

        ' create table
        Dim wb As Workbook, ws As Worksheet
        Set wb = ThisWorkbook
        Set ws = wb.Sheets(sheet_name)
        ws.Cells.Clear
        With ws.Range(table_posn)
            .Value = Array("Log Date", "User Name", "Activity Count")
            .Offset(1, 0).CopyFromRecordset rsResult
            ws.ListObjects.Add xlSrcRange, .CurrentRegion, , xlYes
            .AutoFilter
            .EntireColumn.HorizontalAlignment = xlCenter
            .Offset(0, 2).EntireColumn.HorizontalAlignment = xlCenter
        End With

        ' end
        MsgBox rsResult.RecordCount & " records written to " & sheet_name, vbInformation, "Finished"
        rsResult.Close
        Set rsResult = Nothing

    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...