gpt4 book ai didi

vba - 带有日期的循环的 Excel VBA 脚本

转载 作者:行者123 更新时间:2023-12-03 18:38:55 26 4
gpt4 key购买 nike

我正在计算两个给定日期之间的工作时间(上午 8 点到晚上 8 点),不包括周末和公共(public)假期,但我的代码语法不正确。

样本数据:

开始日期:17/06/2011 08:00:00 AM

结束日:19/06/2011 08:00:00 PM

Sub SLA_Days_Resolved_F()
Dim x As Integer
' Set numrows = number of rows of data.
NumRows = Range("F2", Range("F2").End(xlDown)).Rows.Count

Dim total As Integer 'to count the total hours
Dim st As String 'start date cell
Dim en As String 'end date cell
Dim destCell As String
Dim d As Date ' for the loop

total = 0

' Establish "For" loop to loop "numrows" number of times.
For x = 2 To NumRows + 1
st = "G" & CStr(x) 'reference to the cells
en = "D" & CStr(x)
'loop from start date to end date
For d = Date(Range(st)) To Date(Range(en))
'check if the current date is found is a Public holiday in the range or if a weekend
If ((Vlookup(d,lookups!$o$3:$p$26,2,false))=1) or (weekend(d))Then
'minus 8 to remove hours before 8am.
total = (total + Hour(d) + minutes(d) / 60) - 8
End If
Next
Next
End Sub

最佳答案

您没有为变量赋值 sten .
Date不是 VBA 中可用的函数。您可能需要使用 DateSerial 函数。这是一个循环日期的简单示例,您应该能够修改它。

Sub LoopDates()
Dim d As Date
'Loop the days beteween today and March 1, 2013.
For d = DateSerial(Year(Now), Month(Now), Day(Now)) To DateSerial(2013, 3, 1)

Debug.Print d 'Prints the "d" value in the immediate window.
Next

End Sub

此外,您不能只将工作表公式放入 VBA。此行对于 Vlookup 和 Weekend 绝对是错误的语法。不是我知道的公式(测试它似乎确认它不是工作表或 VBA 中的有效调用。
If ((Vlookup(d,lookups!$o$3:$p$26,2,false))=1) or (weekend(d))Then
改写为:
If Application.WorksheetFunction.Vlookup(d,Sheets("lookups").Range("$o$3:$p$26"),2,false)=1 _
or Not Application.WorksheetFunction.Weekday(d) Then

另一个例子 在一个日期循环中,我以我认为更有效的方式对变量进行了标注:
Sub Test()

Dim st As Range
Dim x As Integer
Dim stDate As Date
Dim enDate As Date
Dim d As Date
Dim numRows as Long

NumRows = Range("F2", Range("F2").End(xlDown)).Rows.Count

For x = 0 To NumRows-2
'SET YOUR VARIABLES HERE
' This may seem redundant or unnecessary for this case, but it makes structuring nested
' loops easier to work with, and then there are fewer places to make changes,
' if you need to make changes.

Set st = Range("G2").Offset(x, 0)
Set en = Range("D2").Offset(x, 0)
stDate = DateSerial(Year(st), Month(st), Day(st))
enDate = DateSerial(Year(en), Month(en), Day(en))

'Then, loop through the dates as necessary
For d = stDate To enDate
Debug.Print d
'Do your code here.
Next

Next


End Sub

关于vba - 带有日期的循环的 Excel VBA 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016743/

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