excel - 引用另一个工作表的 VBA 自定义函数在编辑器中正确运行,但从工作表调用时不会执行
问题描述
我有一个自定义函数来执行一些任务,但它似乎在设置引用的工作簿的开始处停止。当我从 VBA 编辑器调用该函数时,它工作得很好。当我从工作表中调用该函数时,它不起作用。真实代码如下:
Function getAF(MCID As Variant) As String
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks.Open(CreateObject("Scripting.FileSystemObject").GetParentFolderName(ActiveWorkbook.Path) & "\Investment_Prioritisation_Utility.xlsm")
Set ws = wb.Worksheets("assetHierachy")
lastrow = ws.Cells(Rows.Count, "F").End(xlUp).Row
inarr = Range(ws.Cells(5, Columns("D").Column), ws.Cells(lastrow, Columns("F").Column))
Searchfor = MCID
On Error GoTo eh
For i = 1 To lastrow
If inarr(i, UBound(inarr, 2)) = Searchfor Then
getAF = inarr(i, 2)
Exit For
End If
Next i
If IsNumeric(getAF) Then
getAF = "AF" & getAF
Else
End If
Done:
Exit Function
eh:
getAF = "-"
End Function
在调试过程中,我将问题简化为以下代码示例,但输入和输出声明保持不变:
Function getAF(MCID As Variant) As String
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks.Open(CreateObject("Scripting.FileSystemObject").GetParentFolderName(ActiveWorkbook.Path) & "\Investment_Prioritisation_Utility.xlsm")
Set ws = wb.Worksheets("assetHierachy")
return ws.Cells(1, 1)
任何帮助将不胜感激!
解决方案
Caller
当它是一个单元格时,您无法从 UDF 打开工作簿。从 VBA 中调用时,它可以工作。
不允许在工作表单元格中使用的 UDF 更改工作表的结构。这意味着 UDF 不能将值返回给使用它的单元格以外的任何其他单元格,并且它不能更改单元格的物理特征,例如字体颜色或背景图案。此外,UDF 不能执行复制或移动电子表格单元格等操作。他们甚至不能执行一些暗示光标位置改变的动作,例如编辑 -> 查找。UDF 可以调用另一个函数,甚至是子例程,但该过程将受到与 UDF 相同的限制。仍然不允许更改工作表的结构
(Excel 2003 VBA 程序员参考,第 22 页,Wiley Publishing, Inc)
作为一种解决方法,您可以使用事件回调从 VBA 中触发此函数,例如Worksheet_Change
(例如)
推荐阅读
- passenger - 如何使用 hapijs v18* 设置乘客?
- dll - 如何创建包含 dll 的 msi 安装程序包
- python - 如何在 python 中实现 Switch-Case?
- c++ - 带有可变参数包的函数的 C++ 部分模板参数推导在 Clang 和 MSVC 中产生模棱两可的调用
- amazon-web-services - 如何在 AWS Powershell 中强制删除堆栈
- node.js - 如何将 JHipster 应用程序生成到特定目录中?
- mysql - 使用子查询创建新触发器时出现问题
- angular - 在“@angular/core”Angular v8.1.0 中找不到导出“ɵɵelementHostStyling”
- javascript - 选中一个拨动开关时如何取消选中所有拨动开关?
- python - 如何重复循环遍历列表以分配值