Access vba中的代码行顺序

时间:2013-10-24 20:30:59

标签: access-vba

我有一个名为Main的表单。在它上面我有

  • 用于保存记录ID的文本框
  • 组合框,用于从现有记录中进行选择或输入新记录的名称
  • 用于保存组合框中名称的文本框
  • 用于打开表单的按钮,可让我们输入其他数据并创建新记录
  • 用于打开允许我们编辑现有记录的表单的按钮

我在组合框中级联列表的行源。如果条目不在列表中, NotInList事件

  • 将组合框中的名称复制到主要
  • 上的文本框中
  • 加载创建表单并将名称从Main复制到创建表单上的相应字段。

一切正常。问题是当我在创建表单上点击“保存”时,我无法正确地将值写回主表单。我想将组合框中的名称写回Main上的组合框,并将记录ID写入Main上的文本字段。

这是两行代码。如果我改变他们的顺序,输出会改变。组合框最终为空白,或者记录ID文本字段最终为空白。

当我调试这个时,我可以看到值存在,但我无法进行分配。我最后一次尝试使用combobox.text它抱怨价值不存在 在列表中,所以我运行了行源的查询,但是记录没有显示在组合框列表中,而是在表格中。请参阅下面的两行代码(粗体)。

    Private Sub cmbSaveClose_Click()
    Dim x As Integer

    x = MsgBox("Are you sure you want to save changes?", 4, "Exit?")

    'VbNo constant throws back #7
    'VbYes constant throws back #6

     Me.Txt32 = DLookup("InsuranceCarrierContractID", "ICCDupRecordCheckQ")

     If x = 7 Then
     Exit Sub
     End If

     If IsNull(Me.Txt32) Then

        Me.Txt31 = Form_frmMain.Txt65

        DoCmd.RunCommand acCmdSaveRecord

**Forms!frmMain.cboInsuranceCarrierContract = Me.InsuranceCarrierContractID
Forms!frmMain.Txt66 = Me.InsuranceCarrierContractID**

        DoCmd.Close

        Forms!frmMain!InsuranceCarrierContract.RowSource = 
                              " SELECT InsuranceCarrierContract.ContractNumber " & _
                              " FROM InsuranceCarrierContract " & _
                              " ORDER BY InsuranceCarrierContract.ContractNumber;"

'其他东西,工作正常。

Form_frmMain.cboInsuranceCarrierContract.Locked = False
Form_frmMain.cboInsuranceCarrierContract.BackColor = 
                             Form_frmMain.cboInsuranceCarrier.BackColor

否则     Me.Undo     DoCmd.Close

结束如果 结束子

1 个答案:

答案 0 :(得分:0)

这适用于David,所以将其添加为答案:

更改数据后重新查询并重新刷新表单。

Me.Requery 
Me.Refresh

来自表单模块或外部:

Forms("MyFormName").Requery
Forms("MyFormName").Refresh

http://msdn.microsoft.com/en-us/library/office/ff191903.aspx

http://msdn.microsoft.com/en-us/library/office/ff836021.aspx