【问题标题】:RunCode macro action from 'hybrid' Access web database error来自“混合”访问 Web 数据库错误的 RunCode 宏操作
【发布时间】:2023-03-25 00:41:01
【问题描述】:

我有一个 Access 网络数据库

  • 在这个数据库中,我有一个带有按钮的 Web 表单
  • 在其点击事件宏中,它调用成功触发的RunMacro Macro1(客户端宏)
  • 在 Macro1 中,如果我调用 RunCode Function Name: DoTest() 它会返回错误:“您输入的函数不能在此表达式中使用... 错误号 2426(如果前面有“=”符号,则为 2950我的功能)

通过执行以下步骤很容易重现此问题:

  1. 在 MS Access 中创建一个空白的 web 数据库
  2. 添加并保存表格
  3. 从该表创建一个默认表单并在其上放置一个按钮
  4. 创建一个新的 VBA 模块“Module1”并在其中放入以下函数:

    Public Function DoTest()
        MsgBox "Test function runs smoothly"
    End Function
    
  5. 使用RunCode: Function Name: DoTest() 创建一个客户端宏“Macro1”(请注意,IntelliSense 可以识别该宏,并且可以从这里正常运行)
  6. 创建表单按钮的点击宏事件RunMacro: Macro Name: Macro1
  7. 单击表单视图中的表单按钮接收错误:

您输入的函数不能用于此表达式。

  • 您可能在 表达。
  • 您可能在设计网格或计算控件或字段中使用了聚合函数,例如 Count。

单击“确定”会显示错误号 2426 或 2950,具体取决于您的函数名称前是否有等号在客户端宏的 RunCode 命令中。

我已经尝试了very similar question 中的所有提示,但没有任何运气。 Access 似乎发现函数很好,因为用乱码替换函数名会产生非常不同的错误。

我到底做错了什么?

在使用发布到 SharePoint 2010 的 Access Services 的实际 Web 数据库中,我在表单按钮的单击事件上使用了 If IsClient() Then 宏语句来确保 VBA 仅在客户端模式下运行,但这不是与我收到的错误相关。

【问题讨论】:

    标签: vba ms-access-2010


    【解决方案1】:

    经过一些额外的挖掘,我遇到了this post in another forum。 在这里,作者简单地解释说我正在尝试做的事情不起作用(当你认为它应该做的时候)。

    因为它在另一个论坛上,所以我将说明对我也有效的解决方法(来源:jakedrew,UtterAccess 帖子,2​​011 年 6 月 9 日)。基本上,除了客户端宏之外,您还需要使用客户端表单作为从 Web 表单到 VBA 的中间步骤。我通过执行以下操作使其对我当前的应用程序有效:

    1. 我将我的函数重新保存为子函数:

      Public Sub DoTest(ByVal intArg As Integer)
          MsgBox "Test sub runs smoothly with argument = " & intArg
      End Sub
      
    2. 创建一个客户端表单(我的名为“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
      
    3. 客户端宏“Macro1”现在改为:

      OpenForm
        Form Name  frmVBA_Bridge
        View Form
        Where Condition
        Data Mode
        Window Mode  Hidden
      
    4. Web 表单按钮的单击嵌入宏更改为:

      If  IsClient() = True Then
        SetTempVar
          Name SubName
          Expression ="DoTest"
        SetTempVar
          Name Arg1
          Expression = 100
        RunMacro
          Macro Name Macro1
      End If
      

    对于这么简单的事情有相当多的解决方法,但它似乎可以完成工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多