首页 > 解决方案 > 使用 vba 添加新记录时跳过空白字段

问题描述

我有一个表格,用户可以打开它来为客户添加新的费用和服务。有 10 个费用字段,如果用户取消选中“标准小时费率”复选框,我将其设置为自动填充费用术语。

如果他们取消单击 Std-Hourly,则字段 [Fee001] 将从灰显和空白变为显示“服务 #1 到 #3....”,并且用户可以根据需要编辑文本显示“服务 #1 到 #7”(取决于客户端有多少服务)

当用户单击“保存”按钮时,我将数据保存到 TblFee_ByClient 表中。该表有每个服务的记录([ClientID] 和 [Service] 是该表中仅有的 2 个字段),但表单本身有 10 个字段([Fee001]、[Fee002]、Fee003] 等),用户可以编辑/生成。

除了我的代码之外的所有工作还为用户清除/删除的字段添加记录,以便我有一个带有 [ClientID] 的记录并且没有列出服务。如何添加代码以跳过空字段?这是到目前为止的vba,我在“Move.Next”上收到错误“Argument not optional”:


Private Sub Toggle154_Click()

Dim TblFee_ByClient As DAO.Recordset
Set TblFee_ByClient = CurrentDb.OpenRecordset("SELECT * FROM [TblFee_ByClient]")

    TblFee_ByClient.AddNew
        
    TblFee_ByClient![ClientID] = Me.ClientID.Value
        If Me.Fee001.Value Is Not Null Then
    TblFee_ByClient![Fee] = Me.Fee001.Value
        Else Move.Next
        End If
        
    TblFee_ByClient![ClientID] = Me.ClientID.Value
    TblFee_ByClient![Fee] = Me.Fee002.Value

TblFee_ByClient.Update
TblFee_ByClient.Close

Set TblFee_ByClient = Nothing


End Sub

标签: vbams-accessms-access-2016

解决方案


正确的语法是TblFee_ByClient.MoveNext但看不到这里需要它。
在 VBA 中使用 IsNull()。Is Null用于查询。或者更好的是,处理 Null 或空字符串的可能性。
不要使用现有记录打开记录集。
10 个控件中的每一个都需要一个条件语句。这可以在一个循环中完成。

Private Sub Toggle154_Click()

Dim TblFee_ByClient As DAO.Recordset
Dim x As Integer, strFee As String

Set TblFee_ByClient = CurrentDb.OpenRecordset("SELECT * FROM [TblFee_ByClient] WHERE 1=0")
With TblFee_ByClient
For x = 1 To 10
    strFee = "Fee" & Format(x, "000")
    If Nz(Me(strFee), "") <> "" Then
        .AddNew
        !ClientID = Me.ClientID
        !Fee = Me(strFee)
        .Update
    End If
Next
.Close
End With
Set TblFee_ByClient = Nothing

End Sub

推荐阅读