Заполните форму VBA из деталей уже в форме - PullRequest
0 голосов
/ 22 мая 2018

Мне снова нужна ваша помощь в том, что должно быть легче сделать.Тем не менее, это также может быть более сложным, чем кажется.

Форма должна отображаться после кода:

Form as it should be displayed after code

Как вы можете видеть из приведенной выше формы, я хотел бы написать (вставить) значение изкоробки, окрашенные в желтый, красный и зеленый, к списку ниже 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 года, но с января 2018 года, хотя в поле финансового года отображается только год, в котором заканчивается финансовый год,

Может кто-нибудь помочь, пожалуйста?

Большое спасибо.

1 Ответ

0 голосов
/ 22 мая 2018

Вы не хотите, чтобы эта логика была скрыта в какой-то логике нажатия кнопок.

Создайте функцию, выделенную для этого: вы берете параметр 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 aka «июль 2018», а функция вернет строку, например, "0318", поскольку июль 2018 года является третьим периодом в 2018 финансовом году;присвойте ему 2018-02-01 он же «февраль 2018», и функция вернет "1017", так как это 10-й период финансового года 2017.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...