1

有没有人有任何例子说明我如何在 VBA 中循环一个月?

目前我有一个具有月份值“十月”的源表。我在工作表中嵌入了一个宏按钮,该按钮创建了一个新工作表,我需要它从当前具有本月值的单元格中获取值并将其放置在新工作表中,但向前一个月,即本例中的“十一月” .

4

3 回答 3

5

您可以创建一个可重用的函数来返回您正在寻找的内容,或者尝试结合 Month/MonthName 函数来获得您正在寻找的内容。

Function GetNextMonth(Byval currentMonth as string) As string
   Select Case currentMonth
      Case "January"
          GetNextMonth = "February"
      Case "February"
          GetNextMonth = "March"
      Case "March"
          GetNextMonth = "April"
      Case "April"
          GetNextMonth = "May"
      Case "May"
          GetNextMonth = "June"
      Case "June"
          GetNextMonth = "July"
      Case "July"
          GetNextMonth = "August"
      Case "August"
          GetNextMonth = "September"
      Case "September"
          GetNextMonth = "October"
      Case "October"
          GetNextMonth = "November"
      Case "November"
          GetNextMonth = "December"
      Case "December"
          GetNextMonth = "January"
    End Select
End Function

更短的组合方法:

Function GetNextMonth(ByVal currentMonth as string) As String
    GetNextMonth = MonthName(Month(DateValue("01-" & currentMonth & "-2000"))+1)
End Function

使用您当前的月份名称给 VBA 一个日期,让它转换它,然后从中获取月份编号,添加一个并返回月份名称。但是,您可能需要添加检查以查看当前月份是否为 12(极端情况)。

于 2013-11-05T05:31:37.420 回答
5

作为用户定义的函数

Function NextMonth(m As String) As String
    NextMonth = Format(DateAdd("m", 1, DateValue("1 " & m & " 2000")), "mmmm")
End Function

或作为 Excel 公式(其中D1包含要偏移的月份)

=TEXT(EDATE( DATEVALUE("1 " & D1 & " 2000"),1), "mmmm")
于 2013-11-05T07:32:51.653 回答
0

甚至更短的 udf 没有明确的DateAdd功能

此函数接受字符串和数字,因此currMonth参数可以是“January”、“Jan”或 1。

Function NextMonth$(currMonth)
    NextMonth = Format(CDate(currMonth & "/2 0") + 30, "mmmm")
End Function

笔记

因此,该函数将在1900 年 1 月 2 日CDate(= 0 年)的日期转换上述输入,通过添加 30 天(平均月份)肯定会到达下个月。函数 via 参数返回下个月的全名,例如。Formatmmmm"February"

于 2019-02-08T18:26:00.080 回答