入门代码问题:“未定义子或函数”

问题描述 投票:-1回答:1

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

我正在用excel创建个人项目的计划。

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

  1. 类型1:日期是一组日期中最早的日期
  2. 类型2:日期是完全手动的,由用户填写,因此函数返回“”
  3. 类型3:日期来自同一工作簿中的另一个工作表
  4. 类型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

提前感谢

excel vba user-defined-functions
1个回答
0
投票

在顶部插入:

Option Explicit

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

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

with:

dateType.Value = 2

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

也替换:

WorkDay_Intl

with:

WorkDay.Intl

可能还有其他错误。

© www.soinside.com 2019 - 2024. All rights reserved.