无法在Report_Open事件中更改TextBox的文本

3

我想要做的就是,在另一个表单的按钮点击时,将文本框或标签的文本设置为动态内容。我已经解决了一切问题,除了实际更改文本。

这段代码在SetFocus上给出了运行时错误2478:

Me.tFilial.SetFocus
Me.tFilial.Text = filialen

没有使用 SetFocus,我会收到运行时错误,提示无法更改文本,因为没有将控件切换到相关的控件。

在 Access 中,似乎始终存在“何时允许什么”的问题。我该如何解决这个问题?我能在其他表格中的按钮单击事件中设置值吗?

Reports![rptPressSchema]![tFilial].text="Hello"?

如果使用标签可以解决问题,我非常乐意这样做。但是最重要的是,我可以尝试用各种方式来解决问题,但我想向您征求最佳实践的建议,因为这肯定是一项非常常见的任务。


你能发一些更多的代码吗?你使用哪个事件来改变文本? - Simon
标题中已经写明了 - Report_Open。我尝试按照第二个代码粘贴的方式在按钮点击时进行设置,但是出现了错误消息:“报告未打开”。 - Henrik Erlandsson
3
访问报表对事件非常挑剔。“Report open”可能不适合此操作。不要包含“.Text”属性,它对于没有焦点的控件来说是不必要的,并且仅适用于拥有焦点的控件。如果您一定需要一个属性,可以使用“.value”。 - Fionnuala
2个回答

3
从Access帮助文件中可知:
当控件获得焦点时,Text属性包含当前位于控件中的文本数据; Value属性包含控件上一次已保存的数据。当你将焦点移动到另一个控件时,控件数据会被更新,Value属性会被设置为新值。然后,Text属性设置变得不可用,直到该控件再次获得焦点。如果你在记录菜单中使用“保存记录”命令来保存控件中的数据而不移动焦点,则Text属性和Value属性的设置将相同。
基本上,在报告中,单个控件不能获得焦点,因此.Text属性没有用处。然而,正如@Remou所述的评论中一样,你可以简单地用.Value替换.Text,你的代码应该可以正常工作(在更新值时无需设置焦点)。

1
现在我认为通过在报表中使用VB代码的事件来修改数据“太晚了”。在打开报表之前,我会确保所有源数据都可用且格式正确。我建议采用这种方法,它可以节省大量的头痛,并使报表生成变得轻松简单。 - Henrik Erlandsson
1
@HenrikErlandsson:这绝对是首选的方法。通常来说,它更快速且容错性更强。尽管如此,在某些情况下,你可能只能通过更新报告事件中的值来解决问题。 - mwolfe02

1

我花了很多时间搜索和尝试,最终找到了解决方法...

为了动态设置文本框的内容,使用 tbTest.Value = "hello" 很方便。

但是问题在于如果你在 On Open 中使用它,会出现麻烦...

运行时错误 '2448' 无法为此对象分配值。

所以你需要在 On Load 中设置该值。

Private Sub Report_Load()
Me.tbTest.Value = "hello"
End Sub

Private Sub Report_Open(Cancel As Integer)
'Me.tbTest.Value = "hello"
End Sub

我看不到任何关于这个的解释,我的猜测是针对“打开事件”,该对象仍未初始化(document 用于解释加载和打开事件)...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接