excel - 使用 Excel VBA 在数据库中填写分月付款
问题描述
我正在制作一个电子表格来控制我的财务状况。我制作了一个 VBA 代码,在其中输入了 4 个不同的数据: i) 客户名称;ii) 合同总价值;iii) 支付合同的月数;iv) 第一次付款的日期。
我已经能够完成并使用代码,该代码在 4 个不同的列中使用这些信息填充数据库。
问题是,我希望它(当我单击插入按钮时)根据将要支付的月数(分期付款)自动拆分值并填写日期。例如:
用户表单
- 客户姓名:约翰
- 总价值:1,000.00 美元
- 付款次数:4
- 首次付款日期:01/01/2020
也就是说,John 将在 2020 年 1 月 1 日(1 月)付给我 250 美元;2020 年 2 月 1 日(2 月)250 美元,依此类推……我希望它在数据库中显示如下:
客户 | 价值 | 日期 - 月/日/年 |
---|---|---|
克莱尔 | 2,000 | 12/05/2019(数据库单次付款示例) |
约翰 | 250 | 2020 年 1 月 1 日 |
约翰 | 250 | 2020 年 2 月 1 日 |
约翰 | 250 | 2020 年 3 月 1 日 |
约翰 | 250 | 2020 年 4 月 1 日 |
标记 | 500 | 2020 年 6 月 2 日(示例) |
而且我不知道如何做到这一点......有人可以帮助我吗?
代码是:
Private Sub cmdAdd_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Projetos")
'find first empty row in database
iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
'copy the data to the database
With ws
.Cells(iRow, 2).Value = Me.boxCliente.Value
.Cells(iRow, 3) = CCur(boxValor.Value)
.Cells(iRow, 4).Value = Me.boxParcela.Value
.Cells(iRow, 5) = CDate(boxData.Value)
End With
'clear the data
Me.boxCliente.Value = ""
Me.boxValor.Value = ""
Me.boxParcela.Value = ""
Me.boxData.Value = ""
End Sub
解决方案
你可以试试这段代码。
它总是可以优化这一点。也许一个小错误修复它是可能的。但是没有文本数据表就不清楚了。
Private Sub cmdAdd_Click()
Dim iRow As Long
Dim ws As Worksheet
Dim Name a string
Dim counter As Integer
Dim money As Double
Dim Date as Date
Dim i As Integer
Set ws = Worksheets("Projetos")
'find first empty row in database
iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
'copy the data to the database
With ws
.Cells(iRow, 2).Value = Me.boxCliente.Value 'Client
.Cells(iRow, 3) = CCur(boxValor.Value) 'Money
.Cells(iRow, 4).Value = Me.boxParcela.Value 'Number of Payments
.Cells(iRow, 5) = CDate(boxData.Value) 'Date
If .Cells(iRow, 4) <> 1 Then
Name = .Cells(iRow, 2).Value
counter = .Cells(iRow, 4).Value
money = .Cells(iRow, 3).Value
Date = .Cells(iRow, 5).Value
For i = 0 To counter - 1
.Cells(iRow + i, 2).Value = Name
.Cells(iRow + i, 3).Value = money / counter
.Cells(iRow + i, 5).Value = Format(DateAdd("m", i, Date), "mmddyyyy")
Next i
End With
'clear the data
Me.boxCliente.Value = ""
Me.boxValor.Value = ""
Me.boxParcela.Value = ""
Me.boxData.Value = ""
End Sub
推荐阅读
- php - Laravel:如何在单元测试中检查 JSON 数据数组的每个元素属性值
- python - 在数据帧上应用过滤器时出错 - PySpark
- pandas - 迭代具有不同属性的数据框
- quarkus - Quarkus Native 可执行文件失败
- python - 如何在创建时使字段可编辑,但在现有对象中只读?
- javascript - 如何部署 MERN 应用程序?Hostgator 上的共享服务器还不够吗?
- r - 从 Shiny 应用程序运行的“DBI::dbGetQuery”问题
- python - 如何获取 Django MultiSelectField 值
- java - 如何创建更短的 if 语句,或者让它们看起来更好?
- oauth - 通过 IMAP 连接到 Office365 登录失败次数过多 - 基本 VS 现代身份验证