vba - 使用 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
解决方案
正确的语法是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
推荐阅读
- php - 如何在laravel中使用json字符串将大数据插入数据库?
- reactjs - 为什么要在 render() 方法之外定义无状态函数?
- php - Guzzle 不读取身体值
- javascript - 扁平化字符串字典和字典
- javascript - What technologies are used in the editor of Canva
- python - 训练问题,Val 损失和准确率不变
- airflow - 如何计算 Airflow DAG 的总执行时间
- ethereum - web3.eth.getAccounts(); 当前不工作
- javascript - 使用 Ruby 与 Cytoscape.js API 交互
- python - 我需要删除python中大于1的列表元素