使用VB Application.Ontime方法,从Excel范围读取可变时间

acruukt9  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(53)

使用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

字符串
这是我在这个论坛上的第一个问题,所以请原谅我对它的使用的天真。

vs3odd8k

vs3odd8k1#

我已经解决了这个问题。问题是日期的格式。一旦我改变了语法:
TimeToRun = CDate(.Range(“AH”& 2 + i).Value)
一切都开始正常工作。

相关问题