如何在VBA中等待CPU使用率降至60%以下?
在VBA中等待CPU使用率降至60%以下的实现方法
基于你提供的CPU使用率检测代码,我们可以通过循环检测总CPU使用率+定时延迟的方式实现等待逻辑,具体代码如下:
Public Sub WaitForLowCPU() Dim strComputer As String Dim objWMIService As Object Dim colItems As Object Dim objItem As Object Dim cpuUsage As Integer strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Do ' 查询总CPU使用率(InstanceName="_Total"对应整体CPU) Set colItems = objWMIService.ExecQuery( _ "SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE InstanceName='_Total'", , 48) For Each objItem In colItems cpuUsage = objItem.PercentProcessorTime Exit For ' 只取总CPU的数值,跳出循环 Next ' 输出当前CPU使用率到立即窗口,方便调试 Debug.Print "当前CPU使用率:" & cpuUsage & "%" ' 如果CPU使用率≥60%,暂停1秒后继续检测 If cpuUsage >= 60 Then Sleep 1000 End If Loop While cpuUsage >= 60 Debug.Print "CPU使用率已降至60%以下,继续执行后续操作" End Sub ' 必须在模块顶部添加此API声明(适配32/64位Office) #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If
关键说明:
- 筛选总CPU使用率:原代码会返回每个CPU核心的使用率,我们通过
WHERE InstanceName='_Total'直接获取整体CPU的使用率,结果更准确。 - 循环检测逻辑:用
Do...Loop While循环持续检测,直到CPU使用率低于60%才退出循环。 - 延迟优化:使用
Sleep函数让程序每次检测后暂停1秒,避免频繁查询占用过多系统资源。注意要在模块顶部添加对应的API声明,适配32位和64位Office。 - 调试输出:通过
Debug.Print输出当前CPU使用率,方便你在VBA编辑器的立即窗口查看检测过程。
内容的提问来源于stack exchange,提问作者Kram Kramer
相关产品推荐
相关产品推荐

