Forms VBA Access编译错误-未找到数据成员-如何忽略?

Forms VBA Access编译错误-未找到数据成员-如何忽略?,forms,vba,ms-access,compiler-errors,Forms,Vba,Ms Access,Compiler Errors,我在MS Access中的表单按钮中有下面的代码。问题是,有时并非所有的“strCTRL”都存在。在某些情况下,他们这样做,在某些情况下,他们不这样做。整个代码有900多行,所以我不会全部发布。这是一个引用控件并提取其值的SQL查询 当不是所有控件都存在时,问题就出现了,然后我得到了错误:编译错误:找不到方法或数据成员 有没有办法绕过编译错误,或者告诉VBA仅在它存在时才编译它?我尝试了如果…什么都没有和下一步继续出错,但它们似乎不起作用。每个页面上都有其他不存在的对象,不仅仅是下面的对象。那么

我在MS Access中的表单按钮中有下面的代码。问题是,有时并非所有的“strCTRL”都存在。在某些情况下,他们这样做,在某些情况下,他们不这样做。整个代码有900多行,所以我不会全部发布。这是一个引用控件并提取其值的SQL查询

当不是所有控件都存在时,问题就出现了,然后我得到了错误:编译错误:找不到方法或数据成员

有没有办法绕过编译错误,或者告诉VBA仅在它存在时才编译它?我尝试了
如果…什么都没有
下一步继续出错
,但它们似乎不起作用。每个页面上都有其他不存在的对象,不仅仅是下面的对象。那么…有什么想法吗=/

Dim strCTRL1 As String
Dim strCTRL2 As String
Dim strCTRL3 As String
Dim strCTRL4 As String
Dim strCTRL5 As String
Dim strCTRL6 As String
Dim strCTRL7 As String
Dim strCTRL8 As String
Dim strCTRL9 As String
Dim strCTRL10 As String
DoCmd.SetWarnings False
On Error Resume Next
strCTRL1 = "[Control Number] = " & Me.Text684.DefaultValue & " "
strCTRL2 = "[Control Number] = " & Me.Label2210.DefaultValue & " "
strCTRL3 = "[Control Number] = " & Me.Label2295.DefaultValue & " "
strCTRL4 = "[Control Number] = " & Me.Label73.DefaultValue & " "
strCTRL5 = "[Control Number] = " & Me.Label160.DefaultValue & " "
strCTRL6 = "[Control Number] = " & Me.Label246.DefaultValue & " "
strCTRL7 = "[Control Number] = " & Me.Label332.DefaultValue & " "
strCTRL8 = "[Control Number] = " & Me.Label417.DefaultValue & " "
strCTRL9 = "[Control Number] = " & Me.Label506.DefaultValue & " "
strCTRL10 = "[Control Number] = " & Me.Text2285.DefaultValue & " "

您可以创建标签名称的数组或列表,然后:

Dim LabelName As String
Dim LabelNames As Variant

LabelNames = Array("Text684", "Label2210", ...etc.)
' ...
LabelName = LabelNames(1)
strCTRL1 = "[Control Number] = " & Me(LabelName).DefaultValue & " "

当然,对于不存在的标签,这将在运行时编译失败。

好的,多亏了@Gustav,你才有了要编译的代码,他的建议,再加上下一步错误恢复时的
将使你的代码在任何情况下都能正常运行

但无法判断代码是否正确,因为现在编译器不会告诉您哪些控件命名错误或丢失

因此,我建议采用如下基于阵列的方法:

    Dim Ctl As Access.Control
    Dim CtlValues() As String 
    Dim i as Long

    i = 0
    ReDim CtlValues 1 To Me.Controls.Count 

    For Each Ctl In Me.Controls
        If Ctl.ControlType = acTextBox Then
            i = i + 1
            CtlValues(i) = "[Control Number] = " & CStr(Nz(Ctl.DefaultValue, "Null"))
        End If
    Next

    ReDim Preserve CtlValues 1 To i
这12行代码执行的任务与900行代码相同(以您的示例为例)。此代码将以任何形式工作,无论有多少个控件以及它们的名称。此代码更易于理解和使用


看看这样的方法在这里是否可行。

标签没有
.DefaultValue
属性,这可能是导致错误的另一个原因。它们不是标签,它们是转换后的文本框…不要问lol。当我使用数组=/任何其他想法时,仍然会出现相同的错误?当然,你必须,要么对数组进行调暗,要么使用
array
将其创建为要编译的代码的变体。我尝试对其进行调暗,但没有成功。但我不知道如何将其创建为变体。您打算如何帮助标签名/字符串等?谢谢!这起作用了。此外,我还制作了另一个版本,其中隐藏了不需要的图纸/控件。宏循环通过它们并找到它们,但它们不可见:)再次感谢!这是我希望做的事情,但不幸的是无法工作,因为每个页面上20个文本框中只有12-13个是以这种方式处理的,并且它们在每个页面上有不同的名称,在每个页面上有不同的控制编号文本框引用。不过,这给了我以后使用的好主意:)也谢谢你!