отобразить возвращенный массив UDF в Excel - PullRequest
0 голосов
/ 24 мая 2018

Я создаю UDF, который будет возвращать двумерный массив варианта / строки.Я хочу отобразить этот возвращенный массив в Excel с верхним левым угловым элементом массива, показанным в ячейке, где была введена функция UDF.

в основном моя функция выглядит так:

Function func(sql as String)

    Dim Password As String
    Dim Server_Name As String
    Dim User_ID As String
    Dim Database_Name As String

    Server_Name = "XXXXXXXX"
    Database_Name = "YYYYYY"
    User_ID = "zzzzzz"
    Password = "vvvvvvvvv"

    Set rs = CreateObject("ADODB.Recordset")
    Set cn = CreateObject("ADODB.Connection")

     cn.Open "Driver={MySQL ODBC 5.3 Unicode Driver};Server=" & _
       Server_Name & ";Database=" & Database_Name & _
       ";Uid=" & User_ID & ";Pwd=" & Password & ";"
     rs.Open sql, cn, adOpenStatic

     result = rs.GetRows()
     function_caller = Application.Caller.Address

     If VarType(result) = 8204 Then
        For r = 0 To UBound(result, 1)
           For c = 0 To UBound(result, 2)
             Range(function_caller).Offset(r, c).Value = result(r, c)
           Next
        Next
     End If

End Function

, когда я набираю в ячейке C10 следующую формулу

=func("select * from db.sample_table")

при условии, что выполнение SQL возвращает мне массив с 5 строками6 столбцов, я надеюсь, что массив может быть красиво отображен в диапазоне C10: H14.Когда я щелкну мышью по C10, я смогу увидеть свою формулу.

Я знаю, что возвращаемое значение UDF не может быть записано ни в одну ячейку, кроме той, в которую был вызван udf.Из-за этого я попытался заполнить свой массив ячейками до завершения выполнения UDF.Однако приведенный выше код будет отображать только «0» в ячейке C10.

...