将月份名称转换为数字

时间:2018-03-06 14:43:59

标签: excel vba excel-vba integer userform

我有一个用户表单,询问数据输入适用于哪个月。我使用了一个带有jan,feb,mar等的combibox作为可能的答案。 现在我想使用这些答案来引用工作表索引编号Jan sheets(2),feb = sheets(3)等。 我该怎么做?

Private Sub Userform_Initialize()
'Empty maandbox1
MultiPage1.Value = 0
Maandbox.Value = ""
With Maandbox
    .AddItem "Jan"
    .AddItem "Feb"
    .AddItem "Mar"
    'etc
End With
'Set Focus on Monthbox
Maandbox.SetFocus
End Sub

然后像:

dim ws as worksheet
dim i as integer
i = Monthbox.Value
Set ws = ActiveWorkbook.Worksheets(i + 1)

3 个答案:

答案 0 :(得分:0)

i = Monthbox.Listindex + 2

应该这样做,因为listindex从0开始。

答案 1 :(得分:0)

您可以使用MonthName()。它需要Long值并返回其月份。因此,1为January,2为February等。要获取当月的前三个字母,请使用Left(value, 3)

Public Sub TestMe()

    Dim cnt As Long

    For cnt = 1 To 12
        Debug.Print MonthName(cnt)
        Debug.Print Left(MonthName(cnt), 3)
    Next cnt

End Sub

在你的情况下:

Dim ws As Worksheet
Dim i As Long
i = Monthbox.Value
Set ws = ActiveWorkbook.Worksheets(Left(MonthName(cnt + 1), 3))

答案 2 :(得分:0)

您可以使用DateValue function返回虚拟日期并从中拉出整数月号:

Dim dt as Date, i as Long
    dt = DateValue(Maandbox.Value & " 1," & Format(Now(),"YYYY"))
    i = Format(dt, "M") + 1

我通常只将日期设置为该月的第一天。格式(现在()," YYYY")只需将当前日期的日期变为一年即可完成DateValue函数参数。我发现这种方法很灵活,因为它创建了一个日期,您现在可以格式化,但是您需要它。例如,如果您需要完整的月份描述,您现在可以选择:

RunMonth = Format(dt, "MMMM")

因为它已保存在您的变量中。