来自“混合”访问 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 帖子,2​​011 年 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 宏操作的主要内容,如果未能解决你的问题,请参考以下文章

Winform混合式开发框架访问Web API接口的处理

混合使用Azure LB和ILB访问相同web服务

Winform混合式开发框架访问Web API接口的处理

在https上使用Nivo Lightbox时出现混合内容错误

混合使用Azure LB和ILB访问相同web服务

语法错误或访问冲突:1140 GROUP 列混合 laravel