gpt4 book ai didi

excel - NETWORKDAYS.INTL() 函数在 VBA 中不起作用

转载 作者:行者123 更新时间:2023-12-02 11:38:02 28 4
gpt4 key购买 nike

我的宏中有这一行(Mac 上的 Excel 2011 VBA):

nWeekDaysBetween = (Application.WorksheetFunction.NetworkDays.INTL(pDate, aDate, 7) - 1)

当我运行宏时,它会突出显示 NetworkDays 并给出:

Compile error: Argument not optional.

该公式在直接输入单元格时有效,因此它可能确实存在。似乎它没有将 .INTL 识别为 NetworkDays 函数的一部分。

有什么想法吗?

以下是完整的代码供引用:

Sub BHSecondsBetween()

Dim includeWeekends As Integer: includeWeekends = 0
Dim weekendType As Integer: weekendType = 7
Dim openHour As Integer: openHour = 5
Dim closeHour As Integer: closeHour = 24

'weekendType options: (days of week to include as weekend days)
'1 Saturday and Sunday
'2 Sunday and Monday
'3 Monday and Tuesday
'4 Tuesday and Wednesday
'5 Wednesday and Thursday
'6 Thursday and Friday
'7 Friday and Saturday
'11 Sunday
'12 Monday
'13 Tuesday
'14 Wednesday
'15 Thursday
'16 Friday
'17 Saturday

' Remove rows without responses

Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

Selection.Replace What:="", Replacement:="ThisIsADummyStringForMacro", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="ThisIsADummyStringForMacro", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False

Columns("Q").SpecialCells(xlBlanks).EntireRow.Delete

Columns("M:M").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove


Dim NumRows As Integer
NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
'Debug.Print "The value of variable NumRows is: " & NumRows

Dim pDate As Date
Dim aDate As Date
Dim nWeekDaysBetween As Integer
Dim answer As Integer
Dim pDiff As Long
Dim aDiff As Long
Dim pEndOfDay As Date
Dim aStartOfDay As Date

Dim endCell As String

For i = 2 To NumRows
On Error Resume Next
'Debug.Print "The value of variable i is: " & i

pDate = Worksheets("Sheet1").Cells(i, "F").Value
'Debug.Print "The value of variable pDate is: " & pDate

aDate = Worksheets("Sheet1").Cells(i, "T").Value
'Debug.Print "The value of variable aDate is: " & aDate

If includeWeekends = 1 Then
nWeekDaysBetween = DateDiff("d", pDate, aDate)
Else:
nWeekDaysBetween = (Application.WorksheetFunction.NetworkDays_INTL(pDate, aDate, 7) - 1)
End If
'Debug.Print "The value of variable nWeekDaysBetween is: " & nWeekDaysBetween

If nWeekDaysBetween < 0 Then
answer = 0
ElseIf nWeekDaysBetween = 0 Then
answer = DateDiff("s", pDate, aDate)
Else:

If (Hour(pDate) >= closeHour) Then
pDiff = 0
ElseIf (closeHour = 24) Or (closeHour = 0) Then
pEndOfDay = DateSerial(Year(pDate), Month(pDate), Day(pDate)) + TimeSerial(23, 59, 59)
pDiff = DateDiff("s", pDate, pEndOfDay)
Else:
pEndOfDay = DateSerial(Year(pDate), Month(pDate), Day(pDate)) + TimeSerial(closeHour, 0, 0)
pDiff = DateDiff("s", pDate, pEndOfDay)
End If

aStartOfDay = DateSerial(Year(aDate), Month(aDate), Day(aDate)) + TimeSerial(openHour, 0, 0)

If (Hour(aDate) < openHour) Then
aDiff = 0
Else:
aDiff = DateDiff("s", aStartOfDay, aDate)
End If

answer = pDiff + (60 * (closeHour - openHour)) * (nWeekDaysBetween - 1) + aDiff

End If
'Debug.Print "The value of variable answer is: " & answer

endCell = "M" & i
'Dim endContent As String: endContent = hours & ":" & minutes
Range(endCell).Value = answer

Next i

End Sub

最佳答案

您需要在 VBA 中使用 _ 而不是 编写函数。

nWeekDaysBetween = (Application.WorksheetFunction.NetworkDays_Intl(pDate, aDate, 7) - 1)

使用内置的智能感知对于准确了解如何编写属性、方法等始终很有用。

关于excel - NETWORKDAYS.INTL() 函数在 VBA 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33834350/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com