使用 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 添加新记录时跳过空白字段的主要内容,如果未能解决你的问题,请参考以下文章