26

私は VBA 初心者で、Excel セルから呼び出すことができる関数を作成しようとしています。この関数は、閉じているブックを開き、セル値を検索して返すことができます。

これまでのところ、次のようなマクロの書き方を知っています。

Sub OpenWorkbook()
    Dim path As String
    path = "C:\Users\UserName\Desktop\TestSample.xlsx"

    Dim currentWb As Workbook
    Set currentWb = ThisWorkbook


    currentWb.Sheets("Sheet1").Range("A1") = OpenWorkbookToPullData(path, "B2")
End Sub


Function OpenWorkbookToPullData(path, cell)

    Dim openWb As Workbook
    Set openWb = Workbooks.Open(path, , True)

    Dim openWs As Worksheet
    Set openWs = openWb.Sheets("Sheet1")

    OpenWorkbookToPullData = openWs.Range(cell)

    openWb.Close (False)

End Function

マクロ OpenWorkbook() は問題なく実行されますが、Excel セルから直接 OpenWorkbookToPullData(...) を呼び出そうとすると、機能しません。ステートメント:

    Set openWb = Workbooks.Open(path, , True)

何も返しません。

Excelセルから呼び出すことができる実用的なVBA関数に変換する方法を知っている人はいますか?

4

3 に答える 3

1

発生した問題は、UDFs が Excel 環境を変更できないことです。呼び出し元のセルに値を返すことしかできません。

いくつかの選択肢があります

  1. 与えられたサンプルでは、​​実際には VBA は必要ありません。この式は機能します
    ='C:\Users\UserName\Desktop\[TestSample.xlsx]Sheet1'!$B$2

  2. かなり厄介な回避策を使用してください:この回答を参照してください

  3. ExecuteExcel4Macroまたは使用できますOLEDB

于 2013-10-26T02:00:07.750 に答える
0

関数は機能しませんし、必要もありません:

Sub OpenWorkbook()
    Dim r1 As Range, r2 As Range, o As Workbook
    Set r1 = ThisWorkbook.Sheets("Sheet1").Range("A1")
    Set o = Workbooks.Open(Filename:="C:\TestFolder\ABC.xlsx")
    Set r2 = ActiveWorkbook.Sheets("Sheet1").Range("B2")
    [r1] = [r2]
    o.Close
End Sub
于 2013-10-26T14:15:44.050 に答える