【问题标题】:Complete VBA form from details already on the form根据表格上已有的详细信息填写 VBA 表格
【发布时间】:2018-11-01 09:25:40
【问题描述】:

在一些应该更容易做的事情上,我再次需要你的帮助。然而,它也可能比看起来更复杂。

代码后应该显示的表单:

从上面的表格中可以看出,我想将黄色、红色和绿色框中的值写入(粘贴)到下面的列表中 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 月,尽管财政年度框仅显示财政年度结束的年份。

有人可以帮忙吗?

非常感谢。

【问题讨论】:

  • 我还没有为此目的编写任何代码 - 那么现在问还为时过早。请使用tour 并阅读How to Ask。了解minimal reproducible example 如何帮助您对您遇到的具体问题做出很好的描述。看到标题说您在填充表单字段时遇到问题,但您的问题是您正在寻找某人提供代码以将日历月数转换为会计日历月数。您是否尝试过编写一个完全可以做到这一点的函数?
  • 也就是说this article 及其示例代码可以帮助您为表单字段问题找到可靠的解决方案。
  • 这样更好看吗?

标签: vba forms textbox concatenation


【解决方案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 aka "February 2018",函数返回"1017",因为这是 2017 财年的第 10 期。

【讨论】:

  • 非常感谢您。非常令人印象深刻。我根本不这么认为。为我打开了新的视角。
  • @Brenda 很高兴!查看我的个人资料以获取其他有用的链接;我有一个博客,在那里我上传了各种 VBA 想法,主要是关于抽象功能和编写面向对象的 VBA 代码(可以说是更高级的主题),但也更新了 Rubberduck 项目的进展。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2015-11-01
  • 2014-08-01
相关资源
最近更新 更多