使用 vba 添加新记录时跳过空白字段

Posted

技术标签:

【中文标题】使用 vba 添加新记录时跳过空白字段【英文标题】:Skip empty fields when adding a new record using vba 【发布时间】:2020-06-30 22:07:25 【问题描述】:

我有一个表单,用户可以打开它为客户添加新的费用和服务。有 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

【问题讨论】:

【参考方案1】:

正确的语法是 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

【讨论】:

Form上的[Fee001]等字段实际上是Long Text字段。 一般来说,这段代码并不关心数据类型字段是什么。 strFee 是表单控件名称的变量。

以上是关于使用 vba 添加新记录时跳过空白字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 scandir() 时跳过我无权读取/访问的文件,以避免所有记录的错误?

如何在将 csv 文件加载到配置单元表时跳过页脚/拖车记录

使用 VBA 从主菜单打开一个表单,其中一个字段为空/空白

ViewPager 在返回时跳过视图留下空白

提交表单时VBA访问新记录

具有新主键的重复记录 (VBA)