如何使用VBA

时间:2017-09-08 18:27:05

标签: vba ms-access access-vba

这可能是一个愚蠢的问题,但我仍然是Access VBA的新手。我有一个表格上有很多字段。我刚刚创建了一个从另一个表中提取数据的子表单,但我需要它以主表单中的数据为基础。

因此主窗体有项目编号,项目类型, GroupID ,我想使用该组合将Permit从辅助表拉入子窗体。< / p>

主表名为 PMDBII ,辅助表名为 Project_Permit

  • MAIN FORM:主表格是主表格中显示的内容。我在第三个表中也有一个Permit类型列表。
  • SUBFORM:我在子表单中有两个列表框。我想保留与当前 Project 无关的 Permits 列表,另一个用于保存与之关联的 Permits 列表用它。然后有两个按钮可以选择其他 Permits 或删除它们。

表单目前看起来像这样:

Project form

因此,选中的项目会显示与其关联的 Permit 突出显示。

我想要做的是让左侧的列表成为与项目关联的的所有许可证的列表右边的列表是与项目相关联的所有许可

所以它看起来像这样:

+----------------+--------+
| Federal        | Tribal |
| Power Easement |        |
| Railroad       |        |
| State          |        |
| Township       |        |
+----------------+--------+

然后我可以在左边选择另一个许可,然后点击&gt;按钮将其移动到右侧。

问题是我不知道如何将正确的数据输入到 Project_Permit 表中。我知道我需要输入项目编号,项目类型,GroupID Permit 。我可以获得 Permit ,这是我遇到麻烦的其余部分。

这是我到目前为止所得到的:

Private Sub cmd_Select_Click()
    Dim SQL As String
    Dim ProjectNum As String
    Dim PermitNum As String
    Dim GROUPID As String
    Dim ProjectType As String

    With Me.PERMIT
        PermitNum = .Value
    End With


    SQL = "INSERT INTO pmdb.Project_Permit(Project,Permit,ProjectType,GroupID)" _
           & " Select '" & ProjectNum & "', " & PermitNum & ", " & ProjectType & ", '" & GROUPID & "';"

    CurrentDb.Execute SQL

    Forms![DATASHEET - CAF2].Form!PERMIT.Requery
    Forms![DATASHEET - CAF2].Form!Selected.Requery

End Sub

这是主要表格。我不知道如何使用它来获取插入新记录所需的其他数据。

1 个答案:

答案 0 :(得分:2)

只需引用从子窗体调用的追加查询中的主forms controls即可。下面还显示了parameterize the query如何将querydef用作VBA字符串或保存的Access查询方法。当然,调整表单和/或控件名称和参数数据类型。

VBA字符串查询方法

...
Dim qdef as QueryDef

' PREPARE STATEMENT (DEFINES PARAMS AND ADDS THEM AS PLACEHOLDERS)
SQL = "PARAMETERS [ProjectNumParam] TEXT(255), [PermitNumParam] LONG," _
       & "        [ProjectType] TEXT(255), [GROUPIDParam] LONG;" _
       & " INSERT INTO Project_Permit(Project, Permit," _ 
       & "                            ProjectType, GroupID)" _
       & " VALUES ([ProjectNumParam], [PermitNumParam], " _
       & "         [ProjectTypeParam], [GROUPIDParam]);"

' INITIALIZE QUERY OBJECT
Set qdef = CurrentDb.CreateQueryDef("", SQL)

' BIND VALUES TO PARAMS
qdef![ProjectNumParam] = Forms!mymainform!ProjectNum
qdef![PermitNumParam] = Forms!mysubform!PermitNum
qdef![ProjectTypeParam] = Forms!mymainform!ProjectType
qdef![GROUPIDParam] = Forms!mymainform!GROUPID

' EXECUTE ACTION  
qdef.Execute dbfailOnError

Set qdef = NOthing

保存的查询方法

SQL (另存为Access存储查询,PARAMETERS在Access SQL方言中有效)

PARAMETERS [ProjectNumParam] TEXT(255), [PermitNumParam] LONG,
           [ProjectType] TEXT(255), [GROUPIDParam] LONG;
INSERT INTO Project_Permit(Project, Permit, ProjectType, GroupID)
VALUES ([ProjectNumParam], [PermitNumParam], [ProjectTypeParam], [GROUPIDParam])

VBA (按名称引用上述查询)

' INITIALIZE QUERY OBJECT
Set qdef = CurrentDb.QueryDefs("mySavedQuery")

' BIND VALUES TO PARAMS
qdef![ProjectNumParam] = Forms!mymainform!ProjectNum
qdef![PermitNumParam] = Forms!mysubform!PermitNum
qdef![ProjectTypeParam] = Forms!mymainform!ProjectType
qdef![GROUPIDParam] = Forms!mymainform!GROUPID

' EXECUTE ACTION  
qdef.Execute dbfailOnError

Set qdef = Nothing