Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA格式日期以获取上一个月的日期_Excel_Vba_Date - Fatal编程技术网

Excel VBA格式日期以获取上一个月的日期

Excel VBA格式日期以获取上一个月的日期,excel,vba,date,Excel,Vba,Date,我是VBA的新手,这似乎是一项简单的任务。我只是想用当前日期替换上一个月份,并将日期常量设为21,因此结果必须是yyyy-(m-1)-21 到目前为止,我有一些想法,它们部分起作用 Sub Test_Date() Dim x As String Dim p As String p = Format(Date, "mm") - 1 x = Format(Date, "yyyy-" p "-21") End Sub 如果我将MsgBx“p”作为我想要的返回,但是我不

我是VBA的新手,这似乎是一项简单的任务。我只是想用当前日期替换上一个月份,并将日期常量设为21,因此结果必须是yyyy-(m-1)-21

到目前为止,我有一些想法,它们部分起作用

Sub Test_Date()
     Dim x As String
     Dim p As String
   p = Format(Date, "mm") - 1
   x = Format(Date, "yyyy-" p "-21")
End Sub
如果我将MsgBx“p”作为我想要的返回,但是我不知道将它们连接成一个字符串的正确语法


您可以使用
DateSerial

它接受一年、一个月和一天作为它的输入,并以此为基础踢出日期

因此,
DateSerial(2017,9,22)
将给出今天的日期。
为了得到上个月21号,你会使用

DateSerial(Year(Date), Month(Date) - 1, 21) 

年(日期)
返回2017,
月(日期)
返回9。

您可以使用
DateSerial

它接受一年、一个月和一天作为它的输入,并以此为基础踢出日期

因此,
DateSerial(2017,9,22)
将给出今天的日期。
为了得到上个月21号,你会使用

DateSerial(Year(Date), Month(Date) - 1, 21) 
年(日期)
返回2017,
月(日期)
返回9。

使用dateadd函数():

使用dateadd函数():


您也可以尝试以下方法:

Function LastMonth() As Date
    Dim d As Date
        d = DateAdd("m", -1, Date)
    LastMonth = DateSerial(Year(d), Month(d), 21)
End Function
编辑:

根据需要设置返回日期的格式:

Sub Test()
    MsgBox Format(LastMonth, "yyyy-mm-dd")
End Sub

您也可以尝试以下方法:

Function LastMonth() As Date
    Dim d As Date
        d = DateAdd("m", -1, Date)
    LastMonth = DateSerial(Year(d), Month(d), 21)
End Function
编辑:

根据需要设置返回日期的格式:

Sub Test()
    MsgBox Format(LastMonth, "yyyy-mm-dd")
End Sub
试一试

试一试



DateAdd(“m”、-1,Date)
将为您提供所需
DateAdd(“m”、-1,Date)
将为您提供所需,如果Date=2017/01/01,是否会返回2017/12/21?2016/12/21应该在哪里?你好,达伦。它还可以将日期更改为正确的值,但顺序错误,因为最后一个建议显示为mm/dd/yyyy而不是yyyy-mm-dd。谢谢你的帮助comment@KostasK. 不,
Dateserial(2017,1-1,21)
返回2016年12月21日,
Dateserial(2017,-13,1)
返回2015年11月1日。@Darren Bartrup Cook感谢Darren澄清这一点。我不确定@Fabsklo将日期更改为正确的值是什么意思,但在错误的顺序下,
Sheet1.范围(“A1”)=Dateserial(年(日)、月(日)-1,21)
将使用您的本地格式设置在A1中放置日期。然后,您可以将单元格的格式更改为
yyyy-mm-dd
,这样Excel仍然可以理解它是一个日期。出于好奇,如果日期=2017/01/01,它不会返回2017/12/21吗?2016/12/21应该在哪里?你好,达伦。它还可以将日期更改为正确的值,但顺序错误,因为最后一个建议显示为mm/dd/yyyy而不是yyyy-mm-dd。谢谢你的帮助comment@KostasK. 不,
Dateserial(2017,1-1,21)
返回2016年12月21日,
Dateserial(2017,-13,1)
返回2015年11月1日。@Darren Bartrup Cook感谢Darren澄清这一点。我不确定@Fabsklo将日期更改为正确的值是什么意思,但在错误的顺序下,
Sheet1.范围(“A1”)=Dateserial(年(日)、月(日)-1,21)
将使用您的本地格式设置在A1中放置日期。然后,您可以将单元格的格式更改为
yyyy-mm-dd
,这样Excel仍然可以理解这是一个日期。谢谢您,这非常接近,除了日期返回为mm/21/yyy,我需要它为yyyy-mm-21。最后一行代码有一些错误,我尝试了函数lastmount()作为Date Dim d作为Date d=DateAdd(“m”,-1,Date)lastmount=DateSerial(Year(d),Month(d),21)d=Format(lastmount,“yyyy-mm-dd”)MsgBox d End函数,结果相同“8/21/2017”嘿,科斯塔斯!我得到了它。。。只需将变量d的调用从date更改为string。非常感谢兄弟的帮助,祝你过得愉快!您需要在函数外部处理格式。请参阅编辑。谢谢kostas,非常接近,除了日期返回为mm/21/yyyy,我需要它为yyyy-mm-21。最后一行代码有一些错误,我尝试了函数lastmount()作为Date Dim d作为Date d=DateAdd(“m”,-1,Date)lastmount=DateSerial(Year(d),Month(d),21)d=Format(lastmount,“yyyy-mm-dd”)MsgBox d End函数,结果相同“8/21/2017”嘿,科斯塔斯!我得到了它。。。只需将变量d的调用从date更改为string。非常感谢兄弟的帮助,祝你过得愉快!您需要在函数外部处理格式。请参见编辑。