来自' hybrid'的RunCode宏操作访问网络数据库错误

时间:2016-11-30 15:57:39

标签: vba ms-access-2010

我有一个Access网络数据库

  • 在这个数据库中,我有一个带有按钮的网络表单
  • 在其点击事件宏中,它调用成功触发的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. 创建一个客户端宏" Macro1"使用RunCode: Function Name: DoTest()(请注意,IntelliSense可以识别宏,并且可以从此处正常运行)
  6. 创建表单按钮的点击宏事件RunMacro: Macro Name: Macro1
  7. 从表单视图中单击表单的按钮以接收错误:
  8.   

    您输入的功能无法在此表达式中使用。

         
        
    • 您可能使用过DoEvents,LBound,UBound,Spc或Tab功能   表达。
    •   
    • 您可能在设计网格或计算的控件或字段中使用了聚合函数,例如Count。
    •   

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

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

    我到底做错了什么?

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

1 个答案:

答案 0 :(得分:0)

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

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

  1. 我将我的功能重新保存为sub:

    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
    
  5. 对于这么简单的事情,有一种解决方法,但它似乎可以完成这项工作!