【发布时间】: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。
标签: excel vba user-defined-functions