初学者代码问题:“未定义子或函数”

Posted

技术标签:

【中文标题】初学者代码问题:“未定义子或函数”【英文标题】:Beginner Code Problem : "Sub or Function not Defined" 【发布时间】:2020-05-10 13:26:07 【问题描述】:

我是 VBA 领域的新手,目前正在尝试创建一个函数。

我正在为个人项目创建一个 Excel 计划。

我有 4 种不同类型的开始日期。

    类型1:日期是一组日期中最早的日期 类型 2:日期是完全手动的,由用户填写,因此函数返回 "" 类型 3:日期来自同一工作簿中的另一个工作表 类型 4:日期链接到计划的另一个日期

你可以想象它不工作...因为显然该功能没有定义...

如果你能帮我解决这个问题,那就太好了。

代码如下:

Public Function StartDate(dateType As Range, _
                          Optional stateTask As Range, _
                          Optional groupeDate As Range, _
                          Optional dateSimp As Range, _
                          Optional dateLink As Range, _
                          Optional dateSpacing As Range)

Application.Volatile

If Worksheet("TIME-DATE PARAM").Range("dateType").Value = 1 Then

    If Worksheet("TIME-DATE PARAM").Range("stateTask") <> 0 Then

        StartDate = Application.WorksheetFunction.Min("groupeDate")

    Else

        StartDate = ""

    End If

Else: Worksheet("TIME-DATE PARAM").Range("dateType").Value = 2

    StartDate = ""

Else: Worksheet("TIME-DATE PARAM").Range("dateType").Value = 3

    StartDate = Worksheet("TIME-PLAN.SIMP").Range("dateSimp")

Else: Worksheet("TIME-DATE PARAM").Range("dateType").Value = 4

    Dim i As Integer
    i = 0

    Dim j As Integer
    j = 11

    StartDate = Application.WorksheetFunction.WorkDay_Intl( _
        Application.WorksheetFunction.Index(range ("Q13:Q820"), _
            Application.worksheetFunction.Match(Worksheet("TIME-PLAN.SIMP").range("dateLink").value), _
                                                Worksheet("TIME-PLAN.SIMP").range("A13:A820"), _
                                                i), _
                                                i), _
                                                Worksheet("TIME-PLAN.SIMP").range("dateSpacing").value, _
                                                j, _
                                                Worksheet("TIME-PLAN.SIMP").range("H2:L4"))

End If

End Function

提前致谢

【问题讨论】:

乍一看我会说你错过了Worksheet中的s。 Anbd 第二个提示:你的代码中有很多else 如果您确切地提到哪一行 ws 给您错误,这将有所帮助。 它不起作用几乎没有特定线路位置有用。 将给出错误的第一行是 If Worksheet("TIME-DATE PARAM").Range("dateType").Value = 1 Then 行,因为 OP 错过了 s。然后几个Else 行将失败。而startdate =Application.WorksheetFunction.WorkDay_Intl( ... 这条线完全搞砸了。 首先感谢您的回答,@Storax 当您说我错过了 S 时,您的意思是 WorksheetS 而不是 Worksheet ?为什么几个“else”会失败? 我建议先看看语法:Worksheet 和If condition。 【参考方案1】:

在顶部插入:

Option Explicit

由于您的所有输入都是 Range 对象,因此请将所有行替换为:

Worksheet("TIME-DATE PARAM").Range("dateType").Value = 2

与:

dateType.Value = 2

这是因为Range 对象已经“知道”它的父工作表。

同时替换:

WorkDay_Intl

与:

WorkDay.Intl

可能还有其他错误。

【讨论】:

以上是关于初学者代码问题:“未定义子或函数”的主要内容,如果未能解决你的问题,请参考以下文章

错误:未定义子或函数 - 简单小计宏

URLDownloadToFile 生成编译错误:未定义子或函数

VBA Excel 2016 中未定义子或函数

尝试通过单击按钮调用子程序并收到编译错误:未定义子或函数

为啥在尝试读取记录集字段时未定义访问 vba 抛出子或函数?

有人可以解释一下这个与 Js 回调函数有关的代码吗?我对这段代码很困惑,可能是因为我是初学者。问题是: