Forms Dlookup VBA代码,具有2个标准

Forms Dlookup VBA代码,具有2个标准,forms,vba,ms-access,auto-populate,filtered-lookup,Forms,Vba,Ms Access,Auto Populate,Filtered Lookup,我有一个MS Access表单,其中包含一个项目ID字段组合框和几个其他字段。一旦用户选择项目ID字段,表单上的大多数后续字段将自动填充。我试图在表单上添加一个字段,该字段不仅显示基于项目ID的信息,还显示基于交易ID的信息。问题是,我希望交易ID是表单上的一个文本框,用户只需在其中键入交易ID,然后在另一个文本框中显示错误DTL 1字段。这是我到目前为止生成的VBA代码: Private Sub cboProjectID_Change() Dim VarComboKey As Integer

我有一个MS Access表单,其中包含一个项目ID字段组合框和几个其他字段。一旦用户选择项目ID字段,表单上的大多数后续字段将自动填充。我试图在表单上添加一个字段,该字段不仅显示基于项目ID的信息,还显示基于交易ID的信息。问题是,我希望交易ID是表单上的一个文本框,用户只需在其中键入交易ID,然后在另一个文本框中显示错误DTL 1字段。这是我到目前为止生成的VBA代码:

Private Sub cboProjectID_Change()

Dim VarComboKey As Integer 
Dim VarObjective As Variant 
Dim VarStartDate As Variant 
Dim VarEndDate As Variant 
Dim VarRiskCategory As Variant 
Dim VarTarDatSet As Variant

Dim VarErrorCount As Variant 
Dim VarErrorCode As Variant

Dim VarErrorDTL As Variant

VarComboKey = Me.cboProjectID.Value

VarObjective = DLookup("[Objective]", "[Project_HDR_T]", "[Project_ID]= " & VarComboKey) 
Me.txtObjective = VarObjective

VarStartDate = DLookup("[Start_Date]", "[Project_HDR_T]", "[Project_ID] = " & VarComboKey) 
Me.txtStartDate = VarStartDate

VarEndDate = DLookup("[End_Date]", "[Project_HDR_T]", "[Project_ID] = " & VarComboKey) 
Me.txtEndDate = VarEndDate

VarRiskCategory = DLookup("[Risk_Category]", "[Project_HDR_T]", "[Project_ID] = " & VarComboKey) 
Me.txtRiskCategory = VarRiskCategory

VartxtTarDatSet = DLookup("[Targeted_Dataset]", "[Project_Targeted_Dataset]", "[Project_ID] = " & VarComboKey)
Me.txtTarDatSet = VartxtTarDatSet

VarErrorCount = DLookup("[Count_Error_Codes]", "[Project_Error_Final]", "[project_ID] = " & VarComboKey)
Me.txtErrorCount = VarErrorCount

VarErrorCode = DLookup("[ErrorCode]", "[Project_Error_Final]", "[project_ID] = " & VarComboKey) 
Me.txtErrorCode = VarErrorCode

VarErrorDTL = DLookup("[Error_DTL_1]", "[Project_DTA_REV_T]", "[project_ID] = " & VarComboKey And "[Trans_ID] = forms![Quality Risk Assessment]!me.stTransID") 
Me.txtErrorDTL = VarErrorDTL

End Sub  
结尾子段前的两行是我试图攻击此代码的代码。但每次我在表单上的Project_ID组合框中进行选择时,都会得到一个错误运行时错误13,类型不匹配

有人能帮忙吗?

排队

VarErrorDTL = DLookup("[Error_DTL_1]", "[Project_DTA_REV_T]", "[project_ID] = " & VarComboKey And "[Trans_ID] = forms![Quality Risk Assessment]!me.stTransID") 
…And在引号之外,第二个子句似乎混合了这两种形式!还有我。参考的方式。试试看

VarErrorDTL = DLookup("[Error_DTL_1]", "[Project_DTA_REV_T]", "[project_ID] = " & VarComboKey & " And [Trans_ID] = forms![Quality Risk Assessment]!stTransID.Value") 
…看看是否效果更好。或者,你可以试试

VarErrorDTL = DLookup("[Error_DTL_1]", "[Project_DTA_REV_T]", "[project_ID] = " & VarComboKey & " And [Trans_ID] = " & me.stTransID.Value) 
排队

VarErrorDTL = DLookup("[Error_DTL_1]", "[Project_DTA_REV_T]", "[project_ID] = " & VarComboKey And "[Trans_ID] = forms![Quality Risk Assessment]!me.stTransID") 
…And在引号之外,第二个子句似乎混合了这两种形式!还有我。参考的方式。试试看

VarErrorDTL = DLookup("[Error_DTL_1]", "[Project_DTA_REV_T]", "[project_ID] = " & VarComboKey & " And [Trans_ID] = forms![Quality Risk Assessment]!stTransID.Value") 
…看看是否效果更好。或者,你可以试试

VarErrorDTL = DLookup("[Error_DTL_1]", "[Project_DTA_REV_T]", "[project_ID] = " & VarComboKey & " And [Trans_ID] = " & me.stTransID.Value) 
记录集:

Dim rs As DAO.Recordset

sSQL = "SELECT p.Objective, p.Start_Date, p.End_Date FROM Project_HDR_T p " _
     & "WHERE p.Project_ID = " & VarComboKey
Set rs = CurrentDb.OpenRecordset(sSQL)

If rs.EOF Then
    MsgBox "oops"
Else
    VarObjective = rs!Objective
    VarStartDate = rs!Start_Date
    VarEndDate = rs!End_Date
End If
如果所有的表都包含Project_ID,那么应该可以创建一个包含所有表的查询,而且,可以在代码中使用参数保存和引用查询

另见: 记录集:

Dim rs As DAO.Recordset

sSQL = "SELECT p.Objective, p.Start_Date, p.End_Date FROM Project_HDR_T p " _
     & "WHERE p.Project_ID = " & VarComboKey
Set rs = CurrentDb.OpenRecordset(sSQL)

If rs.EOF Then
    MsgBox "oops"
Else
    VarObjective = rs!Objective
    VarStartDate = rs!Start_Date
    VarEndDate = rs!End_Date
End If
如果所有的表都包含Project_ID,那么应该可以创建一个包含所有表的查询,而且,可以在代码中使用参数保存和引用查询

另见:

看起来格式有问题。也许可以尝试VarErrorDTL=DLookup[Error\u DTL\u 1]、[Project\u DTA\u REV\u T]、[Project\u ID]=&VarComboKey&和[Trans\u ID]=&forms![质量风险评估]!me.stTransID me.txtErrorDTL=VarErrorDTLone问题是me。在stTransID前面。我把钥匙从我身上取下来。它给了我这个VBA代码:VarErrorDTL=DLookup[Error\u DTL\u 1],[Project\u DTA\u REV\u T],[Project\u ID]=&VarComboKey&和[Trans\u ID]=&Forms![质量风险评估]![stTransID]Me.txtErrorDTL=VarErrorDTLNow我得到一个运行时错误3075。语法错误查询表达式“[project\u id]=24和[Trans\u id]=”中缺少运算符DlookUp只是在您查找一个项目时的一个好主意,之后,您应该使用记录集。看起来格式有问题。也许可以尝试VarErrorDTL=DLookup[Error\u DTL\u 1]、[Project\u DTA\u REV\u T]、[Project\u ID]=&VarComboKey&和[Trans\u ID]=&forms![质量风险评估]!me.stTransID me.txtErrorDTL=VarErrorDTLone问题是me。在stTransID前面。我把钥匙从我身上取下来。它给了我这个VBA代码:VarErrorDTL=DLookup[Error\u DTL\u 1],[Project\u DTA\u REV\u T],[Project\u ID]=&VarComboKey&和[Trans\u ID]=&Forms![质量风险评估]![stTransID]Me.txtErrorDTL=VarErrorDTLNow我得到一个运行时错误3075。语法错误查询表达式“[project\u id]=24和[Trans\u id]=”中缺少运算符DlookUp只是在查找一项时的一个好主意,之后,您应该使用记录集。第二个VarErrorDTL似乎可以工作,但如果我在表单的stTransID文本框中输入值,txtErrorDTL文本框字段中没有返回值。我想我找到了。如果在从主组合框选择表单项目ID之前进入表单并键入Trans_ID,则会出现相应的错误。是否有某种类型的代码可以放入此表单中,在stTransID文本框中填入值后刷新project_id字段?感谢您迄今为止的帮助。您的第二个示例包含表单![质量风险评估]!将stTransID.Value放在引号中,而不是=&forms![质量风险评估]!stTransID。Value@user1195703您的文本框有一个更新后事件。在那里你可以叫cboProjectID_Change@user1195703:啊,对了,这些代码都在Sub-cboProjectID\u更改中。可能会将最后一对语句移动到stTransID的AfterUpdate事件中,以便在更新时触发,并在cboProjectID_中的最后一条语句更改时调用stTransID_AfterUpdate。第二个VarErrorDTL似乎可以工作,但如果我在表单的stTransID文本框中输入一个值,txtErrorDTL文本框字段中没有返回值。我想我找到了。如果在从主组合框选择表单项目ID之前进入表单并键入Trans_ID,则会出现相应的错误。是否有某种类型的代码可以放入此表单中,在stTransID文本框中填入值后刷新project_id字段?感谢您迄今为止的帮助。您的第二个示例包含表单![质量风险评估]!将stTransID.Value放在引号中,而不是=&forms![质量风险评估]!stTransID。Value@user1195703您的文本框有一个更新后事件。在
你可以打电话给cboProjectID_Change@user1195703:啊,对了,这些代码都在Sub-cboProjectID\u更改中。也许可以将最后一对语句移动到stTransID的AfterUpdate事件中,以便在更新时触发,并在cboProjectID_中的最后一条语句发生更改时调用stTransID_AfterUpdate。上面的代码到底在做什么?我认为Gord提供的上述信息效果良好。唯一的问题是,当我在用户输入的文本框中按enter键时,我需要一种刷新表单的方法。记录集是否返回多个值?在此之前,我发布了另一个问题,其中我试图编写VBA代码来返回多个值……上面的示例返回三个字段列,即Objective、Start_Date、End_Date,用于id等于VarComboKey的所有记录,这些记录来自别名为p的表Project_HDR_T。我添加了一些引用。不过我希望返回多行。可能吗?当然可以。您甚至可以返回所有记录。您应该阅读有关记录集的内容。在使用MS Access时,了解记录集是至关重要的。关于你的另一个问题,你从错误的角度处理问题,就像你在这里一样。上面的代码到底在做什么?我认为Gord提供的上述信息效果良好。唯一的问题是,当我在用户输入的文本框中按enter键时,我需要一种刷新表单的方法。记录集是否返回多个值?在此之前,我发布了另一个问题,其中我试图编写VBA代码来返回多个值……上面的示例返回三个字段列,即Objective、Start_Date、End_Date,用于id等于VarComboKey的所有记录,这些记录来自别名为p的表Project_HDR_T。我添加了一些引用。不过我希望返回多行。可能吗?当然可以。您甚至可以返回所有记录。您应该阅读有关记录集的内容。在使用MS Access时,了解记录集是至关重要的。关于您的另一个问题,您从错误的角度处理问题,就像您在这里一样。