【问题标题】:How to get current month?如何获取当前月份?
【发布时间】:2016-03-10 15:47:17
【问题描述】:

我无法获取当前月份。

获取当前年份和日期似乎很简单,通过以下测试:

MsgBox Year(Date)
MsgBox Day(Date)
MsgBox Year(Now)
MsgBox Day(Now)

如何将当前月份显示为数字(1、2 等)或全名?

我可以在单元格中使用 TODAY() 并在 VBA 中将其转换为 CurrentMonth = MonthName(Month(Sheet1.Range("A1"))) 之类的东西,但我想直接在 VBA for Excel 中执行此操作。

【问题讨论】:

  • Month(Now) 不起作用?它应该返回 3
  • 不,它不是出于某种原因,因此我很困惑。
  • @TimWilkinson 您可能使用了一些保留字,例如“日期”作为字段名称或变量。先解决你的编译问题。
  • 你在某处声明了一个名为 Month 的变量/例程。
  • 在星期四获得了星期五的氛围,我将月份声明为脚本进一步的字符串。现在可以正常工作了。

标签: excel vba


【解决方案1】:

试试,

debug.print Format(Date, "mmm")       'Mar
debug.print Format(Date, "mmmm")      'March
debug.print Format(Date, "m")    '3
debug.print Format(Date, "mm")   '03

【讨论】:

    【解决方案2】:
     Month(Now)
    

    返回与当前月份关联的索引号。

    下面的 Jeeped 代码是最紧凑的,但为了让您了解索引的工作原理,下面的代码将根据返回的索引返回月份名称:

    Dim months(11) As String
    months(0) = "Jan"
    months(1) = "Feb"
    months(2) = "Mar"
    months(3) = "Apr"
    months(4) = "May"
    months(5) = "Jun"
    months(6) = "Jul"
    months(7) = "Aug"
    months(8) = "Sep"
    months(9) = "Oct"
    months(10) = "Nov"
    months(11) = "Dec"
    
    Dim nowMonth As Integer
    nowMonth = Month(Now)
    
    For i = 0 To 11
      If nowMonth = (i + 1) Then
         MsgBox (months(i))
      End If
    Next
    

    【讨论】:

      【解决方案3】:

      找到了一个更简单的解决方案来获取当前月份名称

      只需使用MonthName(Month(Now)) 并将其分配给一个字符串。

      Month(Now) 为您提供月份编号,MonthName() 使用该编号显示当前月份

      【讨论】:

        【解决方案4】:

        一个非常有用且简单的方法是将格式函数与日期结合起来。

        示例(假设今天是 2019 年 10 月 23 日):

        将当前月份作为原始问题中的数字获取:

        MsgBox Format(Date, "mm")
        

        ^ 将返回:10

        以短文本形式获取当前月份:

        MsgBox Format(Date, "mmm")
        

        ^ 将返回:10 月

        获取当前月份的全文:

        MsgBox Format(Date, "mmmm")
        

        ^ 将返回:10 月

        您也可以将这些与日期和年份结合起来。

        其他示例:

        MsgBox Format(Date, "dd-mmm-yyyy")
        

        ^ 将于 2019 年 10 月 23 日返回

        MsgBox Format(Date, "dddd-mmmm-dd-yyyy")
        

        ^ 将返回:2019 年 10 月 23 日星期三

        这是创建自定义格式,因此您可以根据需要重新排列 dd、mm、yyyy 区域,例如:

        MsgBox Format(Date, "yyyy/mm/dd")
        

        ^ 将返回:2019/23/10

        【讨论】:

          【解决方案5】:

          这是我发现的最好的方法:

          Sub getMonth()
          
          'MsgBox DatePart("m", Date)
          'MsgBox Evaluate("MONTH(""" & Date & """)")
          'MsgBox VBA.DateTime.Month(Date)
          
          MsgBox Format(Date, "mmmm")
          
          End Sub
          

          【讨论】:

            【解决方案6】:

            以下是我根据当前月份名称找到上个月的方法,monthNum 的分配是解决您的问题所需的部分。

            month = "February"
            '****'
              monthNum = Application.Evaluate("=MONTH(1&" & Chr(34) & month & Chr(34) & ")") 'Returns month #
            '****'
            If monthNum = 1 Then
                monthNum = 12
            Else
                monthNum = monthNum - 1
            End If
            month = MonthName(monthNum) 'Returns January
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多