将变量格式化为日期(mm / dd)

时间:2017-09-20 16:20:22

标签: excel vba excel-vba

我正在尝试创建一个标识上个月日期范围的脚本(Cell G9是今天的日期)。这是工作;但是,输出格式化日期的方式与我想要的大不相同。 [J36]输出为" 01/08"什么时候应该是" 08/01"并且[J37]输出是" 6:11:37 AM" (将其解释为时间),应该是" 08/31"。我只是在特定单元格中编写输出,因为我希望看到它正在工作。但是,它是我想要格式化的变量,而不是单元格。我将在未来的代码中使用startdate和enddate变量,并且这些变量本身在任何单元格中都是不可见的。

我试图使用格式(startdate,mm / dd),但是我遇到了溢出错误。

这是我的剧本:

Dim thismonth As Integer
    thismonth = Month(Sheet1.[G9])
Dim startdate As Date
Dim enddate As Date


Select Case thismonth
    Case 1
        startdate = 12 / 1
        enddate = 12 / 31
    Case 2
        startdate = 1 / 1
        enddate = 1 / 31
    Case 3
        startdate = 2 / 1
        enddate = 2 / 28
    Case 4
        startdate = 3 / 1
        enddate = 3 / 31
    Case 5
        startdate = 4 / 1
        enddate = 4 / 30
    Case 6
        startdate = 5 / 1
        enddate = 5 / 31
    Case 7
        startdate = 6 / 1
        enddate = 6 / 30
    Case 8
        startdate = 7 / 1
        enddate = 7 / 31
    Case 9
        startdate = 8 / 1
        enddate = 8 / 31
    Case 10
        startdate = 9 / 1
        enddate = 9 / 31
    Case 11
        startdate = 10 / 1
        enddate = 10 / 31
    Case 12
        startdate = 11 / 1
        enddate = 11 / 30
End Select

Sheet1.[J36] = startdate
Sheet1.[J37] = enddate

1 个答案:

答案 0 :(得分:4)

一个更简单的解决方案怎么样:

Dim startDate as Date
Dim endDate as Date

startDate = Application.WorksheetFunction.EOMONTH(Sheet1.[G9],-2) + 1
endDate = Application.WorksheetFunction.EOMONTH(Sheet1.[G9],-1)

您可以完全摆脱VBA并直接在J36J37中编写此工作表公式。

J36:=EOMONTH(G9,-2)+1

J37:=EOMONTH(G9,-1)