3

使用 Access 2010 我的表单上有一个未绑定的组合,它看起来像这样......

RowSource: SELECT EventID, DocRef FROM Events
BoundColumn: 1 
ColumnCount: 2
ColumnWidths: 0cm;2cm

在 vba (MyCombo="23") 中设置组合值仅在绑定列可见时才有效。当我设置 columnWidth="0cm;2cm" 时,分配不再有效。

Sub Form_Open()
   evt = Me.OpenArgs
   If evt > "" Then
      MyCombo = evt
      ' MyCombo.Value = evt
      Call MyCombo_AfterUpdate
   End If
End Sub

如何在不显示 eventID 的情况下选择组合行?

4

3 回答 3

2

我避免处理Form Open. 试试这个Form Load

Private Sub Form_Load()
    If Not IsNull(Me.OpenArgs) Then
        Me.MyCombo = Me.OpenArgs
        Call MyCombo_AfterUpdate
        'Call DoSomething
    End If
End Sub

绑定列的宽度可以为 0,这应该仍然有效。

请注意,如果您的表单已经打开并在您执行此类操作时在组合中选择了一个值...

DoCmd.OpenForm "frmJaybob", OpenArgs:= 4

...组合的值不会更改为 4。

您可能会发现Call MyCombo_AfterUpdate实际上并没有从Form Load. 如果是这样,请将您的代码移动到一个单独的过程中,并从和从MyCombo_AfterUpdate调用新过程。MyCombo_AfterUpdateForm Load

Private Sub DoSomething()
    ' move your MyCombo_AfterUpdate code here
    MsgBox "DoSomething"
End Sub
于 2013-03-01T20:36:43.943 回答
1

我认为这个问题与隐藏 ID 无关。我可以让它工作得很好隐藏或不隐藏。

我看到一些我会改变的事情。You Sub 没有使用正确的事件参数声明,而且我还看到您没有检查空值。如您所述,这对我将组合框设置为隐藏的 ID 字段进行了测试。(事实上​​,它会接受任何一个字段作为正确的输入。)

Private Sub Form_Open(Cancel As Integer)
    Dim evt As String
    If Not IsNull(Me.OpenArgs) Then
        evt = Me.OpenArgs
        If Len(evt) Then
            Me.Combo0.Value = evt
        End If
    End If
End Sub

我通过转到 VB 编辑器,按 control-G 并从即时窗口运行它来测试它:

Docmd.OpenForm "Form1",acNormal,,,,,5329

显然,需要为您的设置更正表单名称和 ID。

于 2015-02-18T04:52:14.303 回答
1

试试这个而不是当前行

MyCombo = evt

如果 evt 是数值,请尝试以下操作

MyCombo = DLookup("DocRef","Events","EventID=" & evt)

如果 evt 是字符串,则使用以下表达式

MyCombo = DLookup("DocRef","Events","EventID='" & evt & "'")
于 2015-02-16T13:38:09.277 回答