如何从Excel单元调用VBA函数?
我是一个VBA新手,我试图写一个函数,我可以从Excel单元格中调用,可以打开closures的工作簿,查找单元格值并返回它。
到目前为止,我知道如何编写一个这样的macros:
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
macrosOpenWorkbook()运行完全正常,但是当我试图直接从Excel单元格调用OpenWorkbookToPullData(…),它不起作用。 该声明:
Set openWb = Workbooks.Open(path, , True)
没有返回。
有谁知道如何把它变成一个可以从Excel单元格中调用的工作VBA函数?
这是答案
遵循的步骤:
-
打开Visual Basic编辑器。 在Excel中,如果在Windows上按Alt + F11 ,在Mac上按Fn + Option + F11 。
-
插入一个新的模块。 从菜单:插入 – >模块。
-
创build一个
Public
职能。 例:Public Function findArea(ByVal width as Double, _ ByVal height as Double) As Double ' Return the area findArea = width * height End Function
-
然后像任何其他函数一样在任何单元格中使用它:
=findArea(B12,C12)
。
您遇到的问题是, UDF
不能修改Excel环境,它们只能向调用单元返回一个值。
有几个select
-
给你的样本实际上并不需要VBA。 这个公式将起作用
='C:\Users\UserName\Desktop\[TestSample.xlsx]Sheet1'!$B$2
-
使用一个相当凌乱的工作: 看到这个答案
-
您可以使用
ExecuteExcel4Macro
或OLEDB
function将不起作用,也不是必需的:
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