vba - 根据表格上已有的详细信息填写 VBA 表格
问题描述
在一些应该更容易做的事情上,我再次需要你的帮助。然而,它也可能比看起来更复杂。
代码后应显示的表单:
从上面的表格中可以看出,我想将黄色、红色和绿色框中的值写入(粘贴)到 3 个命令框下方的列表中。
我还没有为此目的编写任何完整的代码,并且彩色图片是作为没有代码的示例完成的。
到目前为止,这是我想出的:
Private Sub CommandButton6_Click()
sMo = lstmonth
vDte = sMo & "1, " & cboyear
vMo = Month(vDte)
'set fiscal month ACTUAL year
If vMo > 4 Then vDte = DateAdd("yyyy", -1, vDte)
TextBox2 = TextBox1.Value & Format(vDte, "mmyy")
TextBox3 = "Sales Rebate Due - " & UCase(Format(vDte, "mmm yyyy"))
End Sub
我认为它是某种连接函数,但我坚持如何将月份转换为数字以及如何确保年份对应于财政年度的月份,例如,2017 年 7 月但 2018 年 1 月,尽管财政年度框仅显示财政年度结束的年份。
有人可以帮忙吗?
真的非常感谢你。
解决方案
您不希望该逻辑隐藏在某些按钮单击逻辑中。
制作一个专用于该功能的函数:您获取一个Date
参数,并返回一个代表您格式化的财政日历日期的字符串 - 您不能使用标准VBA.DateTime
函数,因为这些函数在与您的不一致的“公民日历”上运行财政期间。
一种方法是使用 12 位数组来保存每个周期使用的偏移量:
Public Function GetFiscalCalendarPeriod(ByVal value As Date) As String
Dim monthPeriods As Variant
monthPeriods = Array(9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8)
Dim yearOffsets As Variant
yearOffsets = Array(-1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0)
Dim index As Long
index = Month(value) - 1 'implicitly sized array is 0-based
Dim periodMonth As Long
periodMonth = monthPeriods(index)
Dim periodYear As Long
periodYear = Year(value) + yearOffsets(index)
GetFiscalCalendarPeriod = Format$(periodMonth, "00") & Right$(Format$(periodYear, "0000"), 2)
End Function
这样,您可以在任何需要该逻辑的任何日期轻松获得“会计期间”。
对于您的对话,您将采用例如2018-07-01
“2018 年 7 月”,并且该函数将返回一个字符串,例如"0318"
,因为 2018 年 7 月是 2018 财年的第三个时期;给它2018-02-01
又名“2018 年 2 月”,函数返回"1017"
,因为这是 2017 财年的第 10 个期间。
推荐阅读
- postgresql - 如何将 postgresql 中 jsonb_path_query 的结果聚合到数组中?
- mysql - MySQL 查询中的空格字符是什么意思?
- java - 为什么 Android Studio 中的 setBackgroundColor() 方法不起作用?
- c# - naudio 立即停止录制
- symfony - Symfony 邮件程序 SSL 例程:tls_process_server_certificate:certificate verify failed
- laravel - 如何从控制器方法中的请求类调用验证器?拉拉维尔 8
- php - 获取php数组中的数据
- python - Python 股票筛选器
- elasticsearch - 如何在 Kibana 中启用 APM?
- javascript - 反应 useState() 问题