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

Posted

技术标签:

【中文标题】如何在自定义 Sub 中获取 VBA Access 中文本框的更新值?【英文标题】:How do I get the updated value of a textbox in VBA Access in a custom Sub? 【发布时间】:2015-10-09 21:09:26 【问题描述】:

适用于 VBA Access 2003

我有一个文本框,我想将其用作列表框行源命令的过滤器。我还有一个复选框,它为同一个 rowsource 命令添加另一个过滤器。我只用 C# 进行了编程,并且我正在尝试编写一个 Sub,无论我的文本框过滤器是否更改或我的复选框过滤器是否更改,它都会简单地设置 RowSource。但是,我的文本框给我带来了问题。

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

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

我目前的尝试:

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

我应该

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

【问题讨论】:

基本上你不需要控件有焦点来阅读它。肯定有其他问题。 我得到的是:运行时错误 2185:除非控件具有焦点,否则您不能引用控件的属性或方法。 这是一个 VBA 表单吗?它是在哪个框架中设计的? VBA 访问 2003。我会补充问题。 这可能会有所帮助。它可能特定于 Access,因为那里的 OP 也使用了 access。 Excel 从来没有遇到过这样的问题:/ ***.com/questions/20703479/run-time-error-2185 【参考方案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

【讨论】:

如果有人能解释为什么 textbox.value 没有被更新,我会给他们接受的答案。我不喜欢没有答案的问题,所以我现在接受我的。

以上是关于如何在自定义 Sub 中获取 VBA Access 中文本框的更新值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Access VBA 中的另一个私有子获取私有子中声明的变量的值

从 vba 中的 sub 调用函数

如何从 VBA Access 中的查询中获取记录?

在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA

VBA for Access,运行时错误 451:未定义属性让过程和属性获取过程未返回对象

如何在 Windows Server 2008 上的 MS Access VBA 中获取 Windows 用户名