【问题标题】:Access fields in form using vba使用 vba 访问表单中的字段
【发布时间】:2015-03-25 03:00:29
【问题描述】:

我在 Microsoft Access 2010 中创建了一个查询和一个表单。名为 TEST 的表单如下所示:

Field1   Field2
a        200
b        400

在 VBA 中,我尝试访问表单中的不同字段:

Form_TEST.Field1....

我想将值 200 和 400 保存在一个整数变量(Dim a As Integer)中并使用 MsgBox 打印它。我怎样才能做到这一点??

【问题讨论】:

  • 所以这是表格结构形式?在这种情况下,您需要将其保存在数组中。总是有两行还是可以更多/更少?
  • 好吧,我想是的。我使用 GUI 菜单创建一个查询,并使用表单助手创建一个名为 TEST 的表单,以显示来自查询的结果。在不同表单的 VBA 编辑器中,我现在想从 TEST 表单访问不同的字段。我不知道如何更好地解释这一点。我是一个纯粹的初学者:/
  • 对。这将比你想象的要困难得多。这就是为什么我问是否总是会有两行。如果有更多/更少,那么您需要遍历记录集并进入字符串变量或其他内容。如果您只有两行,那么您可以使用以下方式引用这些值:x = dgvName.Rows(yourRowIndex).Cells(yourColumnIndex).Value
  • 是的,它总是两列四行。例如,在 VBA 中,当我键入 Form_Test.Rows(2).Cells(2).Value 时,它​​找不到它。它甚至无法识别命令 .Rows...

标签: forms vba ms-access-2010


【解决方案1】:

如果您知道文本框的名称,您可以使用 Me 作为打开的表单并分配变量。

Dim intValue as Integer
'If text box name = TextBox1
intValue = Me.TextBox1.Value

【讨论】:

  • 我不明白,对不起。我有几种形式。从使用 VBA 的不同表单中,我想从表单 TEST 中获取字段。在 VBA 中,我可以使用 Form_TEST 从我的其他表单访问 TEST 表单。 VBA 找到了,但我不知道如何正确访问这些字段
  • 表单上保存值为 200、400 的值的控件的名称是什么?
  • 你的意思是我要存储值 200 和 400 的变量的名称?
  • 不,Field1 和 Field2 存储在窗体上的控件中。 Field1 和 Field 2 不会存在于控件之外的表单上。当您在窗体的设计视图中时,如果您单击字段 1 和字段 2 所在的框并查看控件的属性(如果属性不可见,则 F4)它是什么类型的控件?文本框、子查询、组合框等
【解决方案2】:

我会尽力帮助你的。 我知道您使用向导将 2 个字段放在表单上创建了表单。 不清楚的是您正在使用的视图。

好吧,您的表单可以以不同的方式显示: - 单一形式 - 连续形式 - 数据表

这是由默认视图属性定义的。

要查看表单的属性,请按 F4 查看属性并选择“表单”作为您要查看的对象。

如果您的表单是单一表单或连续表单,您可以访问您放置在上面的两个字段,只需解决它们。

单击您放在表单上的控件,然后按 F4 以查看控件名称。

案例 1 - 单一表单视图 假设您的控件名为 Text1 (200) 和 Text2 (400),为方便起见,您的表单是单个表单。

所以你可以参考2个控件写的值

Dim intText1 As Integer, intText2 As Integer

intText1 = Me.Text1.Value
intText2 = Me.Text2.Value

.Value 属性不是强制性的,因为它是默认属性。 此时可以用 MsgBox 打印出 intText1,2

MsgBox "Text1 = " & CStr(intText1)+ " - Text2 = " & CStr(intText2)

这将显示 Text1 = 200 - Text2 = 400

案例 2 - 连续表单视图 现在让我们假设您的视图是连续形式。 因此,包含 200 和 400 的字段只是一个,但每条记录(行)是一个重复次数与记录数一样多的表格。 在这种情况下,要访问所有记录并将它们存储到一个数组中,您可以在 Form_Load 事件中使用它(您可以通过控件属性窗口 - F4 访问它)

Option Explicit 
Option Base 1                      ' Set the base index for vectors to 1

Dim rst as DAO.Recordset           ' Define a recordset to allocate all query records
Dim Values as Variant              ' Define a variant to allocate all the values

set rst = me.RecordsetClone        ' Copy all records in rst

rst.MoveLast                       ' Go to last record
intNumRecords = rst.RecordCount    ' Count records
rst.MoveFirst                      ' Go back to recordset beginning

ReDim Values(intNumRecords)        ' Resize Values to allocate all values 

i = 1
Do While Not rst.EOF               ' Cycle over all records
    Values(i) = rst!FieldName      ' FieldName is the name of the field of
                                   ' the query that stores 200 and 400    
    i = i + 1                      ' Move to next array element
    rst.MoveNext                   ' Move to next record
Loop

rst.Close                          ' Close recordset
set rst = Nothing                  ' Release memory allocated to rst

for i = 1 To intNumRecords         ' Show easch value as message box
  MsgBox Values(i)
next i

注意事项 请注意,如果您要显示的记录少于 32767 条(您可以存储的带符号的最大整数),则此解决方案有效。 msgbox 要求您在每个值处按 OK。不太舒服。

请告诉我这是不是你要找的东西。

再见, 巫师

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    相关资源
    最近更新 更多