VBA语言(可能)干扰代码

时间:2015-04-03 11:28:51

标签: excel vba date

我试图非常简单地计算两个日期之间的天数,我认为固有的语言设置og excel / windows与代码有关,所以如果有人能澄清这实际上就是这种情况或者找到一个解决方案我将非常感激。

我可以找到同一年中任何两个给定日期之间的天数,所以为了论证我需要 - 2015年1月1日& - 2015年1月7日

当我在excel中写下这些日期时,它会将它们格式化为

01 / 01-2015& 07 / 01-2015 因为丹麦日期从一天开始,然后是月份和年份

然后我将它们从ComboBox中抓取到VBA代码中

Set wb = ActiveWorkbook


With wb.Sheets("Start").Shapes("from_dropdown")
    sd = DateValue(.ControlFormat.List(.ControlFormat.Value))
End With

With wb.Sheets("Start").Shapes("to_dropdown")
    ed = DateValue(.ControlFormat.List(.ControlFormat.Value))
End With

但是当我试图计算他们之间的日子时,我得到了150天。我之所以认为它干扰的语言是因为当我展示" sd"和" ed"使用MsgBox,它显示为

01 / 01-2015和01 / 07-2015 IE不是丹麦标准。

以前有人遇到过这个问题吗?有一个修复?或者我只是做其他完全错误的事情。

完整代码是:

Dim wb As Workbook
Dim sd As Date
Dim ed As Date
Dim numDays

Set wb = ActiveWorkbook


With wb.Sheets("Start").Shapes("from_dropdown")
    sd = DateValue(.ControlFormat.List(.ControlFormat.Value))
End With

With wb.Sheets("Start").Shapes("to_dropdown")
    ed = DateValue(.ControlFormat.List(.ControlFormat.Value))
End With

numDays = DateDiff("d", sd, ed)

MsgBox sd
MsgBox ed
MsgBox numDays

ComboBox提到的excel中的值是

2015年1月1日

2015年2月1日

2015年3月1日

2015年4月1日

2015年5月1日

2015年6月1日

2015年7月1日

2015年8月1日

2015年9月1日

2015年10月1日

1 个答案:

答案 0 :(得分:1)

我认为它与函数DateValue有关。 使用函数Format结果看起来是正确的:

Dim wb As Workbook
Dim sd As Date
Dim ed As Date
Dim numDays

Set wb = ActiveWorkbook

sd = DateValue("01/01/2015")
ed = DateValue("07/01/2015")

numDays = DateDiff("d", sd, ed) 'numDays = 181

sd = Format("01/01/2015", "dd/mm/yyyy")
ed = Format("07/01/2015", "dd/mm/yyyy")

numDays = DateDiff("d", sd, ed) 'numDays = 6

编辑:日期格式错误