如何使用VBA获取当前年份

4

你好,我正在使用这个过去的线程如何使用VBA获取当前年份

答案是使用Year(Date),所以我像这样实现它:

Dim a As Integer
a = Year(Date)

但是当我尝试使用它时,出现了一个错误

运行时13:类型不匹配


2
展示抛出错误的整行代码。根据你所展示的内容如此之少,我们无从解决它。 - psubsee2003
@cHao 不,Year(Date) 是有效的语法。问题很可能在于赋值。 - psubsee2003
1
@sharkantipav 考虑到这对我来说完美地运作,你可能在其他地方遇到了不同的问题,在你改用 DatePart 代码后得到了解决。 - psubsee2003
1
我同意@psubsee2003的观点,这个解决方案似乎完全是巧合。还有其他事情正在发生。 - Brad
1
你也可以尝试使用 VBA.Year(Date)。或者可能是由于缺少了一个库引用。(在 VBE 中的“工具”>“引用”下进行查看)。 - David Zemens
显示剩余4条评论
2个回答

7
在Excel VBA中,你想要使用DATEPART。假设你想要获取年份的数据是有效的(从你提供的信息中难以得知)。
这里了解更多信息:

MS EXCEL: DATEPART函数(VBA)

学习如何使用带有语法和示例的Excel DATEPART函数。

描述

Microsoft Excel DATEPART函数返回给定日期的指定部分。

语法

Microsoft Excel DATEPART函数的语法为:

DatePart(interval, date, [firstdayofweek], [firstweekofyear])

并且这个具体的例子:

DatePart("yyyy", "15/10/2012")将返回2012


1
Datepart 功能完美。谢谢。 - sharkantipav
1
刚刚完成了...前10分钟它不想工作 ;) - sharkantipav
尽管这个回答最终解决了楼主的问题,但我认为这有误导性,因为它实际上并没有回答“为什么我会遇到这个错误”的问题。楼主所尝试的解决方案似乎是完全有效的,因此这个解决方案能够修复问题似乎只是巧合。 - psubsee2003
@DanAndrews如果您是这样解释问题的,那么它就是一个重复的问题,应该被关闭。 - psubsee2003
@psubsee2003 我不反对你的观点。 - SQLMason
显示剩余2条评论

4

我猜测您的类型不匹配错误出现在其他地方,因为Year(Date)是有效的。另一个选项是使用Year(Now)

我猜测您声明了一个奇怪的变量来赋值,因为VBA会为您进行许多奇怪的强制转换。

Dim a As String
a = Year(Now)   ' "2014"

Dim b As Double
b = Year(Now)   '2014

Dim c As Integer
c = Year(Now)   '2014

Dim d As Date
d = Year(Date)  '#7/6/1905#

Dim e
e = Year(Now)   ' 2014 (implicitly cast to integer)

确保你在模块的顶部设置了 Option Explicit 并编译代码。


我尝试了两种方法...在那一行得到了相同的错误...我甚至尝试了像a=Year(Date)这样的东西,但还是出现了同样的错误。 - sharkantipav
“a”的数据类型是什么? - Brad
尝试使用“整数”、“字符串”、“双精度浮点数”,但出现了相同的错误。 - sharkantipav
2
这行代码确实没错吗?你不是在猜测吧?你的函数还有什么其他内容?你能否在一个空模块中创建另一个子程序,然后将我的代码粘贴进去并运行它,看是否会出现错误? - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接