Access 2010 - 输入对表单元素的引用作为文本字段的值
Access 2010 - enter references to form elements as the value of a text field
有没有办法从表单的字段中获取值并将其用作对同一表单中不同字段的引用,而不仅仅是字面上的引用?我希望能够在一个字段中手动输入 [txtFlavor] 之类的内容,并让它显示实际风味,即另一个字段中名为 "txtFlavor" 的字段的值,而不仅仅是字符串“[txtFlavor]”。我基本上是想在 table 中存储一些 vba 引用(术语?),这样我就可以调出一串文本,其中引用了表单上的值。
我被要求创建一个系统,该系统将在 Access 2010 中存储信件模板,并允许用户选择包含个人信息的记录并将该信息插入模板信件中,最好立即以纯文本形式显示在表单上.我已经建议使用报告来执行此操作,但最终用户无法接受table。他们真的只是想要一个结合
的表格
a) 联系人记录,一次一个
与
b) 字母模板,一次一个
我一直在尝试将模板信息及其表单引用存储在 table 中,但我还无法使引用从表单上的另一个文本字段中提取数据。
是否有可能 and/or 尝试在 table 中存储类似以下内容或将其输入到表单的字段中?
[txtFlavor] & " is dull but popular."
然后让它以
的形式显示在其他地方
Vanilla is dull but popular.
我确实觉得自己很蠢,并且确信我错过了一些明显的东西。我所做的一切只是字面上的重复,而不是解释为参考。
您可以让您的用户使用 'tags' 作为数据库信息的占位符来创建他们的模板,这与您在 Word 中设计合并文档的方式类似。所以在你上面的例子中,模板文档看起来像:
{Flavor} is dull but popular.
当需要创建合并结果时,您需要使用 Replace
函数将这些标签更改为实际数据值。因此,如果您的表单上有一个 read-only 文本框,则控件源可能是:
=Replace([txtTemplate], "{Flavor}", [Flavor])
我假设你会有很多潜在的标签,所以使用这种方法你需要嵌套 Replace
函数。我将我的嵌套分成多行以使其更具可读性:
=Replace(
Replace(
Replace([txtTemplate], "{EmpName}", [EmpName]),
"{EmpAddress}", [EmpAddress]),
"{EmpPhone}", [EmpPhone])
如果你有更多的数据库 fields/tags 这将开始变得非常笨重,所以我建议使用一些 VBA 让生活更轻松,也许类似于:
Dim rsSource As Recordset
Dim strMerge As String
Dim intField As Integer
'Assuming your form has a field called EmpNo (numeric data) that you can use to pull data...
Set rsSource = CurrentDb.OpenRecordset ("Select EmpName, EmpAddress, EmpPhone From Employees Where EmpNo = " & Me.EmpNo)
strMerge = txtTemplate
For intField = 0 to rsSource.Fields.Count - 1
strMerge = Replace(strMerge, "{" & rsSource(intField).Name & "}", rsSource(intField))
Next intField
txtMerge = strMerge
rsSource.Close
Set rsSource = Nothing
您可以将此代码放入 txtTemplate 文本框的 AfterUpdate 事件中,它会更新 txtMerge 文本框的内容。您要么需要您的 tag
名称来匹配您的数据库列,或者您可以为 Select
语句中的列添加别名,以便它们与 tag
名称相匹配。
有没有办法从表单的字段中获取值并将其用作对同一表单中不同字段的引用,而不仅仅是字面上的引用?我希望能够在一个字段中手动输入 [txtFlavor] 之类的内容,并让它显示实际风味,即另一个字段中名为 "txtFlavor" 的字段的值,而不仅仅是字符串“[txtFlavor]”。我基本上是想在 table 中存储一些 vba 引用(术语?),这样我就可以调出一串文本,其中引用了表单上的值。
我被要求创建一个系统,该系统将在 Access 2010 中存储信件模板,并允许用户选择包含个人信息的记录并将该信息插入模板信件中,最好立即以纯文本形式显示在表单上.我已经建议使用报告来执行此操作,但最终用户无法接受table。他们真的只是想要一个结合
的表格a) 联系人记录,一次一个
与
b) 字母模板,一次一个
我一直在尝试将模板信息及其表单引用存储在 table 中,但我还无法使引用从表单上的另一个文本字段中提取数据。
是否有可能 and/or 尝试在 table 中存储类似以下内容或将其输入到表单的字段中?
[txtFlavor] & " is dull but popular."
然后让它以
的形式显示在其他地方Vanilla is dull but popular.
我确实觉得自己很蠢,并且确信我错过了一些明显的东西。我所做的一切只是字面上的重复,而不是解释为参考。
您可以让您的用户使用 'tags' 作为数据库信息的占位符来创建他们的模板,这与您在 Word 中设计合并文档的方式类似。所以在你上面的例子中,模板文档看起来像:
{Flavor} is dull but popular.
当需要创建合并结果时,您需要使用 Replace
函数将这些标签更改为实际数据值。因此,如果您的表单上有一个 read-only 文本框,则控件源可能是:
=Replace([txtTemplate], "{Flavor}", [Flavor])
我假设你会有很多潜在的标签,所以使用这种方法你需要嵌套 Replace
函数。我将我的嵌套分成多行以使其更具可读性:
=Replace(
Replace(
Replace([txtTemplate], "{EmpName}", [EmpName]),
"{EmpAddress}", [EmpAddress]),
"{EmpPhone}", [EmpPhone])
如果你有更多的数据库 fields/tags 这将开始变得非常笨重,所以我建议使用一些 VBA 让生活更轻松,也许类似于:
Dim rsSource As Recordset
Dim strMerge As String
Dim intField As Integer
'Assuming your form has a field called EmpNo (numeric data) that you can use to pull data...
Set rsSource = CurrentDb.OpenRecordset ("Select EmpName, EmpAddress, EmpPhone From Employees Where EmpNo = " & Me.EmpNo)
strMerge = txtTemplate
For intField = 0 to rsSource.Fields.Count - 1
strMerge = Replace(strMerge, "{" & rsSource(intField).Name & "}", rsSource(intField))
Next intField
txtMerge = strMerge
rsSource.Close
Set rsSource = Nothing
您可以将此代码放入 txtTemplate 文本框的 AfterUpdate 事件中,它会更新 txtMerge 文本框的内容。您要么需要您的 tag
名称来匹配您的数据库列,或者您可以为 Select
语句中的列添加别名,以便它们与 tag
名称相匹配。