我有一个Access网络数据库
RunMacro Macro1
(客户端宏)RunCode Function Name: DoTest()
,则会返回错误:"您输入的函数无法在此表达式中使用...错误号2426(如果我有,则为2950) " ="我职能面前的符号)通过执行以下步骤可以轻松复制此问题:
创建一个新的VBA模块" Module1"并在其中加入以下功能:
Public Function DoTest()
MsgBox "Test function runs smoothly"
End Function
RunCode: Function Name: DoTest()
(请注意,IntelliSense可以识别宏,并且可以从此处正常运行)RunMacro: Macro Name: Macro1
您输入的功能无法在此表达式中使用。
- 您可能使用过DoEvents,LBound,UBound,Spc或Tab功能 表达。
- 您可能在设计网格或计算的控件或字段中使用了聚合函数,例如Count。
点击"确定"显示错误号2426或2950,具体取决于您在函数名称之前是否有等号,或者在客户端宏的RunCode命令中没有。
我已经尝试了very similar question的所有提示而没有任何运气。 Access似乎发现函数很好,因为用乱码替换函数名会产生一个非常不同的错误。
我到底做错了什么?
在我使用发布到SharePoint 2010的Access Services的实际Web数据库中,我在表单按钮的点击事件上使用If IsClient() Then
宏语句,以确保VBA仅为在客户端模式下运行,但这与我收到的错误无关。
答案 0 :(得分:0)
经过一番额外的挖掘后,我遇到了this post in another forum。 在这里,作者简单地解释了我正在尝试做的事情不起作用(当你认为应该这样做时)。
因为它在另一个论坛上,我将列出对我有用的解决方法(信用:jakedrew,UtterAccess帖子,2011年6月9日)。基本上,除了客户端宏之外,还需要使用客户端表单作为从Web表单到VBA的中间步骤。通过执行以下操作,我对当前的应用程序有效:
我将我的功能重新保存为sub:
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
对于这么简单的事情,有一种解决方法,但它似乎可以完成这项工作!