将月份名称转换为数字

问题描述 投票:1回答:3

我有一个用户表单,询问数据输入适用于哪个月。我使用了一个带有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)
excel vba excel-vba integer userform
3个回答
0
投票

i = Monthbox.Listindex + 2

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


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))

0
投票

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

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

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

RunMonth = Format(dt, "MMMM")

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

© www.soinside.com 2019 - 2024. All rights reserved.