首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我。在泛型请求中,函数失败。

我。在泛型请求中,函数失败。
EN

Stack Overflow用户
提问于 2015-04-21 15:17:24
回答 2查看 129关注 0票数 1

在带有VBA代码的多个按钮(用于添加/编辑/删除数据)的MS Access表单中,每个按钮子例程末尾的代码刷新屏幕,以便用户在单击按钮之前看到最后一条记录。下面是其中一个按钮的请求代码示例:

代码语言:javascript
运行
复制
Dim rst As Recordset, RecordToView As String
Set rst = Me.RecordsetClone
RecordToView = CStr(ProducerID)
Me.Requery
rst.FindFirst "ProducerID = " & RecordToView
Me.Bookmark = rst.Bookmark
rst.Close

此代码或类似版本的代码当前对窗体上的所有按钮重复。下面是创建泛型函数的尝试,这样就可以消除这种冗余代码:

代码语言:javascript
运行
复制
Public Function RefreshScreen(Field As String, ByVal RecordToView As String)
    Dim rst As Recordset
    Set rst = Me.RecordsetClone
    Me.Requery
    rst.FindFirst Field & " = " & RecordToView
    Me.Bookmark = rst.Bookmark
    rst.Close
End Function

像这样叫:

代码语言:javascript
运行
复制
Call RefreshScreen("ProducerID", ProducerID)

但是,当它击中泛型函数中的Me.RecordsetClone时,它会给出一个“编译错误: Me关键字的无效使用”消息。需要对泛型函数进行哪些修改才能使其工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-21 15:49:32

更改过程的声明,以期待对调用表单的引用。

代码语言:javascript
运行
复制
Public Function RefreshScreen(ByRef frm As Form, ByVal fld As String, ByVal RecordToView As String)
    Dim rst As DAO.Recordset
    Set rst = frm.RecordsetClone
    frm.Requery
    rst.FindFirst fld & " = " & RecordToView
    frm.Bookmark = rst.Bookmark
    rst.Close
End Function

(顺便提一句,因为您没有从该函数返回一个值,所以它可能是一个子程序。但这在这里并不重要。)

然后在调用过程时包括Me

代码语言:javascript
运行
复制
Call RefreshScreen(Me, "ProducerID", ProducerID)

我对这样的评论感到惊讶,它说Call()在VBA中已经过时了。我以前从未听说过,但你可以在没有它的情况下调用这个程序:

代码语言:javascript
运行
复制
RefreshScreen Me, "ProducerID", ProducerID
票数 4
EN

Stack Overflow用户

发布于 2015-04-21 15:52:00

你也许可以这样做:

代码语言:javascript
运行
复制
Public Function RefreshScreen( _
    ByRef FormObject As Form, _
    Byval FieldName As String, _
    ByVal RecordToView As Long)

    Dim rst As Recordset

    FormObject.Requery
    Set rst = FormObject.RecordsetClone
    If rst.RecordCount > 0 Then
        rst.FindFirst FieldName & " = " & RecordToView & ""
        If Not rst.NoMatch Then
            FormObject.Bookmark = rst.Bookmark
        End If
    End If
    rst.Close
    Set rst = Nothing

End Function

然后:

代码语言:javascript
运行
复制
RefreshScreen Me, "ProducerID", ProducerID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29776378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档