gpt4 book ai didi

excel - 函数输入数据类型是否影响循环速度/效率

转载 作者:行者123 更新时间:2023-12-04 21:09:44 28 4
gpt4 key购买 nike

这可能是用户“不喜欢”的另一个问题,因为它更多的是与建议相关而不是与问题相关。
我有一个在保存和工作簿打开时触发的代码。
它在 f(白天与夜晚,日期与实际日期)中选择正确的工作表。
周一到周三我的情况是一样的,但周四是不同的时间表,然后我想测试

instr(ws.name,"Thursday") > 0 
我的问题是:输入 sheetname as string 是否更有效?或 ws as worksheet在我的测试功能中。
这里的代码:
调用者
Public Sub SelectionDeQuartAuto()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Visible Then
With ws.Range("B4")
If .Value = Date Then
Exit For
End If
End With
End If
Next
If isDayShift(Now, ws) Then
Set ws = DayShiftSheet
Else
Set ws = NightShiftSheet
End If

If ws Is Nothing Then
Sheets("Vendredi jour").Activate
Else
ws.Activate
End If
End Sub
功能:
Public Function isDayShift(DateTime As Date, ws As Worksheet) As Boolean
If InStr(ws.Name, "Jeudi") > 0 Then
isDayShift = TimeValue(DateTime) > TimeValue("03:00:00") And TimeValue(DateTime) < TimeValue("15:15:00")
Else
isDayShift = TimeValue(DateTime) > TimeValue("03:00:00") And TimeValue(DateTime) < TimeValue("16:15:00")
End If
End Function
这将成为:
Public Sub SelectionDeQuartAuto()
Dim ws As Worksheet
Dim sheetname as string
' For etc..
' Exit for with right ws
sheetname = ws.Name
If isDayShift(Now, sheetname) Then
' etc...
End Sub

Public Function isDayShift(DateTime As Date, sheetname As string) As Boolean
If InStr(sheetname, "Jeudi") > 0 Then
' ... rest
End Function
如果这无关紧要和/或我的问题不恰当,只需在评论中说出来,我就这样离开并删除,谢谢男孩和女孩

最佳答案

这不是关于绩效,而是关于责任和最少知识原则。
如果一个函数只需要知道工作表的名称,那么编写该函数的最佳方法是使其将工作表的名称作为参数。
通过接收 String而不是 Worksheet ,您正在使函数的目的更清晰,将其与 Excel 对象模型解耦(其逻辑适用于任何 String 值,这使得测试更容易),并有助于防止其实现中的 future 范围蔓延(即,如果它具有访问权限到 Worksheet 对象,然后它可以做任何此类引用允许它做的事情)。
我什至会争辩说,您的函数甚至不关心工作表名称,它真正想要使用的是 weekdayName ,并且它是法语值可能很重要,所以我会选择 wkDayFrenchName 之类的东西- 字符串值来自 Worksheet 的事实不是它关心的问题。

Public Function IsDayShift(ByVal DateTime As Date, ByVal wkDayFrenchName As string) As Boolean
If InStr(wkDayFrenchName, "Jeudi") > 0 Then
' ...
End If
End Function
请注意,可以进一步简化逻辑以仅从给定日期计算工作日,这将使其更易于使用且更健壮:
Public Function IsDayShift(ByVal DateTime As Date) As Boolean
If WeekDay(DateTime, vbSunday) > vbThursday Then
' ...
End If
End Function
现在处理一个名为 Jeudi 的工作表("Thursday") 但包含 Date这实际上是 Lundi ("Monday") 仍然会产生正确的输出。可以说该函数可以是无参数的并且负责计算当前日期本身,但是将日期作为参数更加通用,并且过程/函数的职责越少越好。

关于excel - 函数输入数据类型是否影响循环速度/效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63452236/

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