如何在自定义Sub中获取VBA Access中文本框的更新值?

时间:2015-10-09 21:09:26

标签: vba

这适用于VBA Access 2003

我有一个文本框我想用作列表框rowsource命令的过滤器。我还有一个复选框,为同一行源命令添加另一个过滤器。我只用C#编程,我试图编写一个Sub,只需设置RowSource,无论我的文本框过滤器是否更改,或者我的复选框过滤器是否更改。但是,我的文本框给了我一些问题。

如果我的复选框过滤器更改并且我运行我的方法,则textbox.Text会抛出一个错误,说明它必须具有焦点 - Text为null。如果我对该属性进行空检查,则会抛出错误,指出控件必须具有焦点。

我已使用.Value属性,但无论出于何种原因,它都不会更新为较新的值。

我目前的尝试:

   If Me.txtClientFilter.Text = Null Then  ' Error 2185
      filter = Me.txtClientFilter.Value
    Else
      filter = Me.txtClientFilter.Text
    End If

我应该

  • 手动添加焦点,然后每次我想检查时删除它 控制?
  • 在每个控件的事件Sub中复制我的代码?
  • 手动设定 发生变化时的.Value属性?

1 个答案:

答案 0 :(得分:1)

我用一些代码解决了我的问题,我将在下面展示。我不知道幕后发生了什么,但.Value没有得到.Text值的更新。我决定明确地设置它,然后选择整个文本框值。

我最终得到了以下代码,它显式设置了控件的.Value,并将光标重置为控件中文本的末尾。感谢一些名为Brent Spalding here的人为光标代码。

Private Sub txtClientFilter_Change()

  Me.txtClientFilter.Value = Me.txtClientFilter.Text
  ProcessFilter
  txtClientFilter.SelStart = Len(Me.txtClientFilter.Text)
  txtClientFilter.SelLength = 0

End Sub