使用workday函数在对象中存储日期时出错

时间:2017-12-13 15:12:58

标签: vba excel-vba date object excel

我有以下简单的代码:

<script>
     var fruits = ["apple","pear","banana","orange"];

     function showList(){
    list = document.createElement("LI");
   list.setAttribute("href","#");
   for(i=0;i<fruits.length;i++){
        list = fruits[i];
     }


   }

   </script>

   <ul id="list-container" onload="showList();">


  </ul>

但是我得到了

  

424错误:需要一个对象

任何人都可以告诉我为什么会这样?

3 个答案:

答案 0 :(得分:1)

您需要"dd/mm/aaa"周围的引号(我认为应该是"dd/mm/yyyy"

您也可能想要使用它,因为Format返回一个字符串,而不是日期:

currentday = CVDate(Format(WorksheetFunction.WorkDay(Now(), -1), "dd/mm/yyyy"))

答案 1 :(得分:1)

您似乎正在尝试格式化今天,我会用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

答案 2 :(得分:1)

WorskheetFunction.WorkDay

这里有一个拼写错误,VBA运行时不知道要解决WorkskheetFunction要解决的问题,而因为未指定Option Explicit ,它会在此处创建一个未声明的变量fly,一个隐式Variant,它的基础类型取决于你使用它的方式和位置。

因为ABC.XYZ(foo, bar)只能在语法上成为对某个对象的成员调用,所以VBA运行时期望WorkskheetFunction成为一个对象,而它不是 - 它从未被赋值,所以它的底层类型是{ {1}},它不是一个对象 - 因此,抛出了“Object Required”错误。

始终使用Option Explicit。

然后,您将不会愉快地使用拼写错误编译和运行代码。

您还可以通过使用全局Variant/Empty对象限定WorksheetFunction来利用IntelliSense来帮助防止拼写错误:

Application

这样,当您键入Application.WorksheetFunction.WorkDay(...) 点时,您将获得自动完成/智能感知。另一个区别是,如果工作表函数抛出错误,使用这种早期绑定语法,您将获得实际的VBA运行时错误,而使用您正在使用的后期绑定语法(使用它不会获得参数工具提示/ intellisense)如果函数导致错误值,它将返回错误并对.变量进行无效赋值,从而引发可能令人困惑的“类型不匹配”错误。