繁体   English   中英

我在Access Vba中编译函数时遇到语法错误

[英]I am am getting a Syntax Error while I compile my function In Access Vba

我编写了两个函数,直到我尝试添加其他参数时,它们都起作用。 此第一个功能有效,没有错误。 我写了这个,所以我可以根据实际的控件名称轻松获取控件的值。

    Public Function GetControlValue(name As String, FormName As Form) As Object

        Dim obj As Object

        For Each obj In FormName.Controls
            If obj.name = name Then
                Set GetControlValue = obj
             Exit Function
            End If

        Next

    End Function

name变量是实际表单控件的名称,而FormName是控件所在的表单的名称。

下一个函数就是发生错误的地方,为了节省空间,我保留了该函数的其余部分,让我知道是否需要其余部分。

Public Function SqFtGalCovAfterUpdate(RowNumber As Integer, frmName as String)

     Dim SqFtGalCov As Object
     Dim TranEff    As Object
     Dim NetSqFtGal As Object

     Set SqFtGalCov = GetControlValue("tb" & RowNumber,frmName)
     Set TranEff = GetControlValue("tb" & RowNumber + 1,frmName)
     Set NetSqFtGal = GetControlValue("tb" & RowNumber + 2,frmName)

如果我尝试通过变量frmName作为GetControlValue函数中的FormName参数传递表单名称,则会出现语法错误。 现在,如果我从SqFtGalCovAfterUpdate函数中删除了frmName参数,并直接而不是通过变量键入表单名称,它将起作用。

Public Function SqFtGalCovAfterUpdate(RowNumber As Integer)


 Dim SqFtGalCov As Object
 Dim TranEff    As Object
 Dim NetSqFtGal As Object

 Set SqFtGalCov = GetControlValue("tb" & RowNumber,NO VARIABLE JUST TYPE IT IN)
 Set TranEff = GetControlValue("tb" & RowNumber + 1,frmName)
 Set NetSqFtGal = GetControlValue("tb" & RowNumber + 2,frmName)

当我直接输入表单名称时,它可以工作,所以我假设我没有在SqFtGalCovAfterUpdate函数中正确声明我的frmName参数。

Public Function SqFtGalCovAfterUpdate(RowNumber As Integer, frmName As Form)

 Dim SqFtGalCov As Object
 Dim TranEff    As Object
 Dim NetSqFtGal As Object

 Set SqFtGalCov = GetControlValue("tb" & RowNumber, frmName)
 Set TranEff = GetControlValue("tb" & RowNumber + 1, frmName)
 Set NetSqFtGal = GetControlValue("tb" & RowNumber + 2, frmName)

我将frmName更改为

我将对象作为控件变暗,将frmName作为字符串变暗,但得到相同的结果

Public Function SqFtGalCovAfterUpdate(RowNumber As Integer, frmName As String)

 Dim SqFtGalCov As Control
 Dim TranEff    As Control
 Dim NetSqFtGal As Control

 Set SqFtGalCov = GetControlValue("tb" & RowNumber, Forms(frmName))
 Set TranEff = GetControlValue("tb" & RowNumber + 1, Forms(frmName))
 Set NetSqFtGal = GetControlValue("tb" & RowNumber + 2, Forms(frmName))

Public Function GetControlValue(name As String, FormName As Form) As Control

    Dim obj As Control

在GetControlValue中,您将FormName声明为Form,在SqFtGalCovAfterUpdate中,frmName是一个字符串。

您仍然传递一个字符串,因此您需要按其名称分配表单:

Public Function SqFtGalCovAfterUpdate(RowNumber As Integer, frmName as String)

     Dim SqFtGalCov As Object
     Dim TranEff    As Object
     Dim NetSqFtGal As Object

     Set SqFtGalCov = GetControlValue("tb" & RowNumber, Forms(frmName))
     Set TranEff = GetControlValue("tb" & RowNumber + 1, Forms(frmName))
     Set NetSqFtGal = GetControlValue("tb" & RowNumber + 2, Forms(frmName))

另外,由于对象是控件,因此将它们变暗并返回控件:

Public Function GetControlValue(name As String, FormName As Form) As Control

    Dim obj As Control

和:

    Dim SqFtGalCov As Control
    Dim TranEff    As Control
    Dim NetSqFtGal As Control

编辑:

然后尝试一路传递表单名称:

Public Function GetControlValue(name As String, FormName As String) As Control

    Dim obj As Control

    For Each obj In Forms(FormName).Controls
        If obj.name = name Then
            Set GetControlValue = obj
            Exit Function
        End If
    Next

End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM