如何在自定义 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 中的另一个私有子获取私有子中声明的变量的值
在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA