Vba 使用workday函数在对象中存储日期时出错
我有以下简单的代码:Vba 使用workday函数在对象中存储日期时出错,vba,excel,date,object,Vba,Excel,Date,Object,我有以下简单的代码: Sub newsub() Dim currentday As Date Dim cd As String currentday = Format(WorskheetFunction.WorkDay(today, -1), dd / mm / aaaa) cd = currentday MsgBox cd End Sub 但我明白了 424错误:需要一个对象 任何人都可以告诉我为什么会发生这种情况?你需要引用“dd/mm/aaa”(我认为应该是“dd/mm/y
Sub newsub()
Dim currentday As Date
Dim cd As String
currentday = Format(WorskheetFunction.WorkDay(today, -1), dd / mm / aaaa)
cd = currentday
MsgBox cd
End Sub
但我明白了
424错误:需要一个对象
任何人都可以告诉我为什么会发生这种情况?你需要引用
“dd/mm/aaa”
(我认为应该是“dd/mm/yyyy”
)
由于格式
返回的是字符串,而不是日期,因此您也可能希望改用此格式:
currentday = CVDate(Format(WorksheetFunction.WorkDay(Now(), -1), "dd/mm/yyyy"))
您需要在
“dd/mm/aaa”
(我认为实际上应该是“dd/mm/yyyy”
)周围加引号
由于格式
返回的是字符串,而不是日期,因此您也可能希望改用此格式:
currentday = CVDate(Format(WorksheetFunction.WorkDay(Now(), -1), "dd/mm/yyyy"))
您今天似乎正在尝试格式化,我将用Now()替换它,它将按预期工作 将代码更改为以下内容:
Sub newsub()
Dim currentday As Date
currentday = Format(Now() - 1, "dd/mm/yyyy") 'use Now() and format to your liking to get the right date
MsgBox currentday
End Sub
您今天似乎正在尝试格式化,我将用Now()替换它,它将按预期工作 将代码更改为以下内容:
Sub newsub()
Dim currentday As Date
currentday = Format(Now() - 1, "dd/mm/yyyy") 'use Now() and format to your liking to get the right date
MsgBox currentday
End Sub
这里有一个输入错误,VBA运行时不知道要将WorkskheetFunction
解析为什么,而且因为没有指定Option Explicit,它正在动态创建一个未声明的变量,一个隐式变量
,其基本类型取决于您使用它的方式和位置
由于ABC.XYZ(foo,bar)
在语法上只能是某个对象的成员调用,VBA运行时希望WorkskheetFunction
是一个对象,而它不是-它从未被赋值,所以它的基本类型是Variant/Empty
,而不是一个对象-因此,抛出了一个“需要对象”错误
始终使用选项显式。
这样,您就不会愉快地编译和运行带有拼写错误的代码
您还可以利用IntelliSense帮助防止打字错误,方法是使用全局应用程序对象限定工作表功能
:
Application.WorksheetFunction.WorkDay(...)
这样,当您键入
点时,您将获得自动完成/智能感知。另一个区别是,如果工作表函数抛出一个错误,使用此早期绑定语法,您将得到一个实际的VBA运行时错误,而使用的后期绑定语法(您不会得到参数工具提示/intellisense)如果函数产生错误值,它将返回一个错误,并对Date
变量进行无效赋值,从而引发一个可能令人困惑的“类型不匹配”错误
这里有一个输入错误,VBA运行时不知道要将WorkskheetFunction
解析为什么,而且因为没有指定Option Explicit,它正在动态创建一个未声明的变量,一个隐式变量
,其基本类型取决于您使用它的方式和位置
由于ABC.XYZ(foo,bar)
在语法上只能是某个对象的成员调用,VBA运行时希望WorkskheetFunction
是一个对象,而它不是-它从未被赋值,所以它的基本类型是Variant/Empty
,而不是一个对象-因此,抛出了一个“需要对象”错误
始终使用选项显式。
这样,您就不会愉快地编译和运行带有拼写错误的代码
您还可以利用IntelliSense帮助防止打字错误,方法是使用全局应用程序对象限定工作表功能
:
Application.WorksheetFunction.WorkDay(...)
这样,当您键入
点时,您将获得自动完成/智能感知。另一个区别是,如果工作表函数抛出一个错误,使用此早期绑定语法,您将得到一个实际的VBA运行时错误,而使用的后期绑定语法(您不会得到参数工具提示/intellisense)如果函数产生错误值,它将返回一个错误并对Date
变量进行无效赋值,从而引发潜在的混乱“类型不匹配”错误。工作表
..使用现在
而不是今天
工作表
..使用现在
而不是今天
工作正常,谢谢,你能告诉我为什么在这种情况下我必须使用变体格式吗?根据你是否需要时间,使用日期()可能会更好
而不是Now()
。例如,Now()
将返回13/12/2017 16:00:33
,而Date
返回13/12/2017
格式可能因地区而异,我不确定Now
和Now()
之间的差异-两者返回相同的值和Vartype()
说它们都是日期变量类型。这很有效,谢谢,您能告诉我为什么在这种情况下必须使用变量格式吗?根据您是否需要时间,最好使用date()
而不是Now()
。例如,Now()
将返回13/12/2017 16:00:33
,而Date
返回13/12/2017
格式可能因地区而异,我不确定Now
和Now()
之间的差异-两者返回相同的值和Vartype()
说它们都是日期变量类型。谢谢。那么,CVDate返回一个日期对象并格式化一个字符串?它也起作用了,谢谢。那么,CVDate返回一个日期对象并格式化一个字符串?