来自“混合”访问 Web 数据库错误的 RunCode 宏操作
Posted
技术标签:
【中文标题】来自“混合”访问 Web 数据库错误的 RunCode 宏操作【英文标题】:RunCode macro action from 'hybrid' Access web database error 【发布时间】:2016-11-30 15:57:38 【问题描述】:我有一个 Access 网络数据库
在这个数据库中,我有一个带有按钮的 Web 表单 在其点击事件宏中,它调用成功触发的RunMacro Macro1
(客户端宏)
在 Macro1 中,如果我调用 RunCode Function Name: DoTest()
它会返回错误:“您输入的函数不能在此表达式中使用... 错误号 2426(如果前面有“=”符号,则为 2950我的功能)
通过执行以下步骤很容易重现此问题:
-
在 MS Access 中创建一个空白的 web 数据库
添加并保存表格
从该表创建一个默认表单并在其上放置一个按钮
创建一个新的 VBA 模块“Module1”并在其中放入以下函数:
Public Function DoTest()
MsgBox "Test function runs smoothly"
End Function
使用RunCode: Function Name: DoTest()
创建一个客户端宏“Macro1”(请注意,IntelliSense 可以识别该宏,并且可以从这里正常运行)
创建表单按钮的点击宏事件RunMacro: Macro Name: Macro1
单击表单视图中的表单按钮接收错误:
您输入的函数不能用于此表达式。
您可能在 表达。 您可能在设计网格或计算控件或字段中使用了聚合函数,例如 Count。
单击“确定”会显示错误号 2426 或 2950,具体取决于您的函数名称前是否有等号在客户端宏的 RunCode 命令中。
我已经尝试了very similar question 中的所有提示,但没有任何运气。 Access 似乎发现函数很好,因为用乱码替换函数名会产生非常不同的错误。
我到底做错了什么?
在使用发布到 SharePoint 2010 的 Access Services 的实际 Web 数据库中,我在表单按钮的单击事件上使用了 If IsClient() Then
宏语句来确保 VBA 仅在客户端模式下运行,但这不是与我收到的错误相关。
【问题讨论】:
【参考方案1】:经过一些额外的挖掘,我遇到了this post in another forum。 在这里,作者简单地解释说我正在尝试做的事情不起作用(当你认为它应该做的时候)。
因为它在另一个论坛上,所以我将说明对我也有效的解决方法(来源:jakedrew,UtterAccess 帖子,2011 年 6 月 9 日)。基本上,除了客户端宏之外,您还需要使用客户端表单作为从 Web 表单到 VBA 的中间步骤。我通过执行以下操作使其对我当前的应用程序有效:
我将我的函数重新保存为子函数:
Public Sub DoTest(ByVal intArg As Integer)
MsgBox "Test sub runs smoothly with argument = " & intArg
End Sub
创建一个客户端表单(我的名为“frmVBA_Bridge”)并创建以下OnOpen
事件:
Private Sub Form_Open(Cancel As Integer)
' run your code using this command. Note that if you don't have an argument, you won't include the part of this line following the comma
Application.Run TempVars("SubName").Value, TempVars("Arg1").Value
' reset the "parameters"
TempVars("SubName").Value = ""
TempVars("Arg1").Value = 0
DoCmd.Close acForm, Me.Name, acSaveYes
End Sub
客户端宏“Macro1”现在改为:
OpenForm
Form Name frmVBA_Bridge
View Form
Where Condition
Data Mode
Window Mode Hidden
Web 表单按钮的单击嵌入宏更改为:
If IsClient() = True Then
SetTempVar
Name SubName
Expression ="DoTest"
SetTempVar
Name Arg1
Expression = 100
RunMacro
Macro Name Macro1
End If
对于这么简单的事情有相当多的解决方法,但它似乎可以完成工作!
【讨论】:
以上是关于来自“混合”访问 Web 数据库错误的 RunCode 宏操作的主要内容,如果未能解决你的问题,请参考以下文章