0

Excel VBAの例でユーザー定義関数を作成するのを手伝ってください

Function GetTheValue(wbPath, wbName, wsName, cellRef)
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim tmp As Range
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & wbPath & wbName & ";" & _
      "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
    rst.Open "SELECT * FROM [" & wsName & "$" & cellRef & "]", cnn
    Set tmp = Range("L5")
    tmp.CopyFromRecordset rst
    MsgBox tmp.Value
    GetTheValue = tmp.Value
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
End Function

式に署名してセルでこれを使用しようとしました

=GetThaValue("D:\";"test.xls";"Sheet1";"B4")

私のコードの文字列「tmp.CopyFromRecordset rst」が機能しないことを確認してください。この質問の解決を手伝ってください。どうもありがとう

4

1 に答える 1

1

この関数を任意の Excel セルから呼び出す場合は、いくつかの変更が必要です。

まず、いくつかのテストを行いましたが、SQL ステートメントで単一のセルを指すことは許可されていないようです。したがって、次の方法で関数を呼び出す必要があります。

=GetThaValue("D:\";"test.xls";"Sheet1";"B4:B5")

最初のセルB4は、検索するセルになります。

第二に、次のように内部にいくつかのコメントを追加することで、機能がわずかに改善されました

Function GetTheValue(wbPath, wbName, wsName, cellRef)
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim tmp As Range
    Set cnn = New ADODB.Connection
    Set rst = New ADODB.Recordset

    'some changes here according to www.ConnectionStrings.Com
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
          "Data Source=" & wbPath & wbName & ";" & _
          "Extended Properties=""Excel 8.0;"""

    rst.Open "SELECT * FROM [" & wsName & "$" & cellRef & "]", cnn

    'Set tmp = Range("L5")      'NOT needed here
    'tmp.CopyFromRecordset rst   'NOT allowed if function is called from Excel
    'MsgBox tmp.Value           'NOT necessary in this function

    'NEW- in this way we get value of your cell and pass it to excel
    GetTheValue = rst.Fields(0).Value

    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
End Function

Excel 2010 でテスト済みで、正常に動作していることを確認できます。

于 2013-08-02T06:43:41.997 に答える