使用VB Applcation.Ontime方法已经在这里讨论了几次,但不是我想使用它的方式。我使用它来运行一个API Python脚本来从网站收集数据。时间是从一个范围读取的,其想法是每次MyMacro运行后,它将递增到下一个时间,下一个单元格是为下一个预定事件读取的。
事件没有被安排到一个固定的时间间隔,(这将是很好的),但因为这是时间敏感,我必须读的时间。
“i”是在模块的顶部标注的,只要在这里讨论的许多线程中,我使用一个子调用另一个子,再次调用第一个子来创建循环。
这个想法是计时器第一次运行是从AH2读取,然后第二次从AH3读取,第三次是AH4,依此类推。
我已经尝试了许多不同的场景,包括Do Loops和For Loops,但还是做不好。For Loops是一种真实的方法,它创建了许多示例来运行批处理文件。我对这一点有点不满。所以我又回到了旧的i=i+1,但仍然做不好。
问题是“i”没有递增,所以循环没有被创建。
设置固定的时间间隔,以定义频率不是一个合适的解决方案。
如果有人能告诉我我错过了什么,我会很感激的。
提前感谢您的帮助。代码如下。
Sub RunAPITimer()
Dim TimeToRun As Date, CellTime As Date
'Reset i for the next day
If Now() < TimeValue("00:09:00") Then i = 0
'incase i is empty, set i to zero
If IsEmpty(i) Then i = 0
With Sheet10
CellTime = .Range("AH" & 2 + i).Value
TimeToRun = TimeValue(Format(CellTime, "hh:mm:ss"))
Application.OnTime TimeToRun, "myMacro"
End With
End Sub
Sub myMacro()
Dim batchFilePath As String
'Set the file path
batchFilePath = "C:\XXX\a.bat"
' Run the batch file and capture the process ID
Dim shellResult As Double
Dim shellProcess As Object
Set shellProcess = CreateObject("WScript.Shell")
shellResult = shellProcess.Run(batchFilePath, vbHide, True)
With Sheet63 'API Timer Log
'record when the API was run
irow = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & irow).Value = "Timer ran at:"
.Range("C" & irow).Value = Now()
End With
'increment the row counter
i = i + 1
Call RunAPITimer
End Sub
字符串
这是我在这个论坛上的第一个问题,所以请原谅我对它的使用的天真。
1条答案
按热度按时间vs3odd8k1#
我已经解决了这个问题。问题是日期的格式。一旦我改变了语法:
TimeToRun = CDate(.Range(“AH”& 2 + i).Value)
一切都开始正常工作。