精华内容
下载资源
问答
  • VBA中让程序休眠 SLeep的方法

    万次阅读 2017-08-02 22:06:08
    在最上部,定义 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 在程序中 Sleep 500

    在最上部,定义

     

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

     

    在程序中

     

    Sleep 500

     

     

     

     

     

    展开全文
  • 一个应用接口需要限制运行速度,需要在循环中加个延时函数,这个延时不需要多么精确,要求有个几秒延时,网上用的比较多的就是用Timer函数编写,Timer是VBA自带的函数,用起来比较方便,一般程序如下: '延时程序 ...

    查阅相关资料,获取较为可行的三个方法为:

    1、一般延时(计时单位为秒级,1代表1s,下面两种方法皆是毫秒级,1000代表1s)

    一个应用接口需要限制运行速度,需要在循环中加个延时函数,这个延时不需要多么精确,要求有个几秒延时,网上用的比较多的就是用Timer函数编写,Timer是VBA自带的函数,用起来比较方便,一般程序如下:'延时程序

    Sub delay(T As Single)
        Dim time1 As Single
        time1 = Timer
        Do
            DoEvents
        Loop While Timer - time1 < T
        Debug.Print ("运行结束,总计耗时为:" & Timer - time1 & "s")
    End Sub
     
    Sub ce_time()
    delay (1.5)
    End Sub
    
    


    效果图如下:(图一图二一样的,不过图一没有那么讲究换行,代码规范= =||,另计时方式不同~)

    Sub delay(T As Single)
        Dim time1 As Single
        time1 = Timer
        Do
            DoEvents
        Loop While Timer - time1 < T
    End Sub
     
    Sub ce_time()
        Dim d As Date
        
        d = Time()
        delay (2)
        '切换输出计时方式
        Debug.Print ("运行结束,总计耗时为:" & DateDiff("s", d, Time()) & "s")
    End Sub
    
    

     

    2、精确延时--sleep

    精确延时可以使用sleep函数,sleep函数是Windows API函数,使用前必须先声明,然后使用,例如:

    64位系统报错运行代码:(32位系统则为正确代码)

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub ce_time()
        Dim d As Date
    
        d = Time()
        Sleep 3000 '延时3秒
        Debug.Print ("运行结束,总计耗时" & DateDiff("s", d, Time()) & "s")
    End Sub
    

    但是实际运行中,我报错了~

    报错截图如下:

    后找寻结果为:在Declare 后面加上 PtrSafe 即可

    即:Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    至于原因,大概是这样的,详情可以转到另外一个文章:

    https://blog.csdn.net/STR_Liang/article/details/104628452

    在 VBA 7 中,必须更新现有 Windows 应用程序编程接口 (API) 语句(Declare 语句)才能处理 64 位版本。另外,还必须更新这些语句使用的用户定义类型中的地址指针和显示窗口句柄。本文将详细讨论这一点以及 32 位和 64 位版本的 Office 2010 之间的兼容性问题,并提供建议的解决方案。

    64位系统正确运行代码:

    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub ce_time()
        Dim d As Date
    
        d = Time()
        Sleep 3000 '延时3秒
        Debug.Print ("运行结束,总计耗时" & DateDiff("s", d, Time()) & "s")
    End Sub
    

     

    运行截图如下:

     

    sleep函数延时是毫秒级的,精确度比较高,但它在延时时会将程序挂起,使操作系统暂时无法响应用户操作,所以在长延时的时候不适合使用它。

     

    3、精确延时--timeGetTime(这里和上面的sleep一样需要声明,如果报错,同样的加一个PtrSafe即可)

    更好的办法是使用timeGetTime函数,timeGetTime函数返回的是开机到现在的毫秒数,可以支持1毫秒的间隔时间,而且永远增加,不存在回头的问题。当然不是永远不回头,毕竟Long型变量(双字,4字节)也是有取值范围的,这个值在0到2^32之间。大约49.71天。

    同sleep函数一样,timeGetTime函数是Windows API函数,使用前必须先声明,即:

    Private Declare Function timeGetTime Lib "winmm.dll" () As Long

    延时函数和上面的一样,只是将Timer函数换成timeGetTime:

    '精确延时程序

    Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
    Sub delay(T As Long)
        Dim time1 As Long
        time1 = timeGetTime
        Do
            DoEvents
        Loop While timeGetTime - time1 < T
    End Sub
    Sub ce_time()
        Dim d As Date
        
        d = Time()
        Call delay(1000) '调用函数 可以使用call,也可以不使用
        Debug.Print ("运行结束,总计耗时为:" & DateDiff("s", d, Time()) & "s")
    End Sub
    

    注意:延时时间单位是毫秒。由于延时函数中使用了 DoEvents语句交出了系统控制权,所以不会影响用户的其它操作。

    VBA代码截图如下:

    展开全文
  • 大家好,我们今日继续讲解VBA代码解决方案的第82讲内容:如何利用代码让程序延时,SLEEP函数和timeGetTime函数两个API函数的讲解。在上一讲中我们讲了使用Wait方法,但这种方法的不足是只能提供精度为1秒的延时,...

    4419d2f1d3bb3a75e5c578e71049d532.png

    大家好,我们今日继续讲解VBA代码解决方案的第82讲内容:如何利用代码让程序延时,SLEEP函数和timeGetTime函数两个API函数的讲解。

    在上一讲中我们讲了使用Wait方法,但这种方法的不足是只能提供精度为1秒的延时,如果需要更低精度的延时,需要使用Sleep API函数,如下面的代码所示。

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Sub MyTypeDemo()

    Dim sTest As String

    Dim i As Integer

    sTest = "欢迎你来到这个平台学习VBA!"

    For i = 1 To Len(sTest)

    Range("A1").Value = Left(sTest, i)

    Sleep 200

    Next

    End Sub

    代码解析:

    MyTypeDemo过程模拟打字效果在单元格A1中输入一行文字。"欢迎你来到这个平台学习VBA!"

    第1行代码Sleep API函数声明,参数dwMilliseconds为以毫秒为单位的时间长度。

    在第6行到第9行代码在每次循环时增加显示的数据,并且在每次增加时使用Sleep语句延时200毫秒,好像字符逐个输入,从而达到模拟打字的效果.

    在上面的实例中,对于精确延时使用的sleep函数,使用这个函数要注意的是,由于这个函数是Windows API函数,使用前必须先声明,然后使用。 虽然sleep函数延时是毫秒级的,精确度比较高,但它在延时时会将程序挂起,使操作系统暂时无法响应用户操作,所以在长延时的时候不适合使用它。

    更好的办法是使用timeGetTime函数,timeGetTime函数返回的是开机到现在的毫秒数,可以支持1毫秒的间隔时间,而且永远增加,不存在回头的问题。当然不是永远不回头,毕竟Long型变量(双字,4字节)也是有取值范围的,这个值在0到2^32之间。大约49.71天。

    同sleep函数一样,timeGetTime函数是Windows API函数,使用前必须先声明,即:

    Private Declare Function timeGetTime Lib "winmm.dll" () As Long

    延时函数和上面的一样,只是将sleep函数换成timeGetTime:

    Private Declare Function timeGetTime Lib "winmm.dll" () As Long

    Sub S_timeGetTime()

    Dim time1 As Long

    time1 = timeGetTime

    Range("A2").Value = timeGetTime

    Do

    Range("A3").Value = timeGetTime

    DoEvents

    Loop While timeGetTime - time1 < 1000

    MsgBox "时间到!"

    End Sub

    注意:延时时间单位是毫秒。由于延时函数中使用了 DoEvents语句交出了系统控制权,所以不会影响用户的其它操作。

    代码截图:

    3971742aa66b856e2224efdca7702e3b.png

    f751f5f55bf54ff2d35da255c55f981c.png

    运行:

    e11a1ebfbfff5703cfc7de2ff798de9a.png

    dd93f154e456c32e13b168c91dd7677d.png

    今日内容回向:

    1 如何实现程序的延时呢?

    2 本节讲了两种延时的方式,是否理解呢/

    欢迎到我的自媒体平台沟通交流:个人微信号“NZ9668”、头条号“VBA专家”、百家号“VBA与GO语言”、微信公众号“NZ_9668”、社群“VBA学习交流群”。

    这一系列文章是根据我多年的工作经验编写的,也是一直在利用的工具,非常方便好用。现在分享出来,希望能对同样在职场打拼的朋友有些许的帮助,使你的工作更加高效、流畅。朋友们有问题请随时提出来,我们一起探讨学习。对数据分析有需要的公司、组织或个人可以直接联系我,及时为你提供专业的定制技术支持。

    工作不是一切。工作是每个人安身立命、成长发展的基础。但你要知道工作是永远也做不完的,时间会抹去很多问题。多关注自己、家人和朋友,这些才是我们生活中更为重要的东西。

    展开全文
  • 这里自定义了sleep函数,参数毫秒。 DoEvents相当于本线程唤醒了系统线程,让画面不会卡住。   Private Declare Function timeGetTime Lib "winmm.dll" () As Long Sub sleep(ts) '线程睡眠函数 ...

     当用户点击ppt中的按钮时,会产生一个连续的动画。一直到下一次点击时停止动画。

    这里自定义了sleep函数,参数毫秒。

    DoEvents相当于本线程唤醒了系统线程,让画面不会卡住。

     

    Private Declare Function timeGetTime Lib "winmm.dll" () As Long
    
    
    
    Sub sleep(ts) '线程睡眠函数
    
    Dim t, t1
    
    t = timeGetTime
    
    Do
    
    t1 = timeGetTime
    
    If t1 < t Then t1 = 86400 + t1
    
    DoEvents
    
    Loop Until t1 - ts > t
    
    End Sub
    
    
    
    Sub run_it()
    
    Debug.Print "theClassIndex=" & theClassIndex
    
    Debug.Print "theIndex=" & theIndex
    
    If status Then '停下来
    
    status = False
    
    ActivePresentation.Slides(1).Shapes("Rounded Rectangle 6").Visible = msoTrue '开始
    
    ActivePresentation.Slides(1).Shapes("Rounded Rectangle 14").Visible = msoFalse '停止
    
    Else '开始动画
    
    If theClassIndex = -1 Then
    
    MsgBox "全部开始已完成,如要保存结果请保存此PPT。" & vbCrLf & "如要全部重新开始,请点重置!"
    
    Exit Sub
    
    End If
    
    'Debug.Print "进来了1"
    
    status = True
    
    ActivePresentation.Slides(1).Shapes("Rounded Rectangle 14").Visible = msoTrue '停止
    
    ActivePresentation.Slides(1).Shapes("Rounded Rectangle 6").Visible = msoFalse '开始
    
    'Debug.Print "进来了2"
    
    Savetime = timeGetTime '记下开始的时间
    
    Dim k As Integer
    
    k = 0
    
    Do While status
    
    Savetime = timeGetTime '记下开始的时间
    
    Debug.Print Savetime
    
    If k < UBound(sh_name_arr) Then
    
    ActivePresentation.Slides(1).Shapes("TextBox 5").TextFrame.TextRange.Text = sh_name_arr(k)
    
    Debug.Print "旋转" & k & sh_name_arr(k)
    
    k = k + 1
    
    Else
    
    k = 0
    
    ActivePresentation.Slides(1).Shapes("TextBox 5").TextFrame.TextRange.Text = sh_name_arr(k)
    
    Debug.Print "旋转" & k & sh_name_arr(k)
    
    k = k + 1
    
    End If
    
    sleep (50)
    
    Loop
    
    Exit Sub '还没有点停,不抽出
    
    End If
    
    '不是动画时,做其他事,写这里
    
    End Sub

     

    展开全文
  • PPT+VBA实现计时(倒计时)展示,可用于高考倒计时或者系统运行时间计时展示,不用编程。PPT+VBA实现计时(倒计时)展示,可用于高考倒计时或者系统运行时间计时展示,不用编程
  • 大家好,我们今日讲解"VBA信息获取与处理"教程中第十一个专题"VBA如何做到延时获得数据信息"的第二节"使用Sleep API暂停函数实现延时获取数据",这个专题是非常有用的知识点,希望大家能掌握利用。第二节 使用Sleep ...
  • VBA host 中实现 Sleep() 函数

    千次阅读 2006-07-25 18:06:00
    vba 中需要使用 sleep() 函数. 想当然, 一开始是这样实现的:STDMETHODIMP CShell::Sleep(int nMillSeconds){ ::Sleep(nMillSeconds); return S_OK;} 但很快就发现这样不行. Sleep 的时候, 程序主界面死了. ...
  • 延时Sleep,timeGetTime完美结合占CUP少不假死源码
  • Option Explicit '---------------------...Private Declare Sub AppSleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) '-----------------------------------------------------------------------...
  • Excel VBA填写网页上的内容可以实现IE属性Set IE = CreateObject("InternetExplorer.application")IE.Navigate url:="http://www.sina.com"With IE.Document.Forms(0).all("ID").Value = IDVALUE.all("PID").Value =...
  • 引述: 之前在写一个将excel表格... 以下是定义一个睡眠的过程,具体如何实现我没有深入,提供一个方法 Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ‘ 2000ms,即2秒 Sleep 2000
  • vba实现网页自动登录

    2021-06-09 12:14:57
    "用户名" ie.document.GetElementByName("pwpwd").Value = "密码" ie.document.GetElementByName("submit").Click追问: VBA 追答:在最前面添加语句Private Declare Sub Sleep Lib "kernel32" (ByVal ...
  • VBA研究】VBA中编写延时函数

    万次阅读 2015-11-24 11:52:42
    作者:iamlaosong1、一般延时一个应用接口需要限制运行速度,需要在循环中加个延时函数,这个延时不需要多么精确,要求有个几秒延时,网上用的比较多的就是用Timer函数编写,Timer是VBA自带的函数,用起来比较方便,...
  • Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '暂停 64位系统 'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '暂停 32位系统 Dim mark As ...
  • VBA HTML数据抓取指南

    2021-06-10 14:23:27
    我在2016/6/7重写Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)Sub CreditUnion()Dim IE As Object, TableResults As Object, webRow As Object, charterInfo As Variant, p...
  • Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) ' '从meta区域查找IP对应的行,包含但不限于应用/模块 ' Function FindServiceByIP(ip As Variant) As Long Dim Cell As ...
  • VBA如何多线程运行?

    2020-12-21 19:43:52
    <p>VBA用循环语句,For sleep和doevents实现了单元格文字闪烁 <p><br /> For i = 1 To 4 [F1].Font.Color = RGB(0, 0, 0) DoEvents Sleep 300 [F1].Font.Color =...
  • 我正在粘贴代码片段(click here for the entire code)。这是在c + +中,但我认为它也必须是相同的VB。 IHTMLElementCollection *spCollectEmbed; spDocument->get_links(&spCollectEmbed);... Sleep(2000); }
  • Excel VBA开发自动发送邮件

    万次阅读 多人点赞 2017-04-27 17:37:33
    若没有做如下操作设置,则Excel VBA调用Outlook自动发送邮件时提示如下 2.1 Outlook->工具->信任中心 2.2 编程访问->选中”从不向我发出可疑活动警告(不推荐)“,注意:建议使用Excel VBA自动发送...
  • 函数 1.1 Windows API 1.1.1 改变当前鼠标指针形状 1.1.2 Sleep 程序休眠 1.2 自定义函数 1.2.1 去除空格 1.2.2 测试图片格式 1.2.3 获取打印机信息 1.2.4 GB/T 8170 修约 1.2.5 邮箱格式检查 1.2.6 汉字转拼音 ...
  • C#(Winform)调用Excel中VBA宏 简介 最近做一个项目,因为数据分析部分使用VBA简单一些,但是又需要在界面中呈现出来,所以用VBA.C#,SQL相结合的方式完成了本次项目,下面简单的讲讲界面如何操作VBA宏吧 代码区 ///...
  • 之前被问到,Python 很强大,但是需要单独安装,而VBA是office自带的, 那么两者结合的话,如何用Python调用VBA呢? 代码如下: ''' @Author: Liang @LastEditors: Liang @Date: 2020-06-30 14:27:25 @...
  • 目的:基于办公与互联网隔离,自带的office软件没有带本地帮助工具,因此在写vba程序时比较不方便(后来发现07有自带,心中吐血,瞎折腾些什么)。所以想到通过爬虫在官方摘录下来作为参考。所使工具:python3.7,...
  • 16年底,有幸拿到一份答题ppt模板,接手做了“XX知识问答竞赛”ppt,包含选题答题、倒计时、随机抽点等功能,初次接触到了VBA(Visual Basic for Applications)编程。 于是自那以后包办了单位各种答题类ppt……最近...
  • 想要完整提取word文件中的图片,VBA宏中并没有相应的方法,在网络中能找的方法一般就2种,一种是另存为网页,然后在files文件夹下会自动产生图片,此方法有弊端,当一个图片重复使用则只会保存一份,当然这其实正常...
  • VBA模拟抽签关键代码

    2021-09-11 11:34:07
    'Sleep调用申明 Private Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long) Private Sub StartButton_Click() If personNumber <> "" Then Range("C3:C" & personNumber + 2)....
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼跪求各位大神,最近因为VBA调用IE的问题弄得焦头烂额,深夜3点还是睡不着,小弟VBA小白一枚,在大量百度各种求救无奈之下发此贴,肯请各位老师帮忙看看下面代码的问题,...
  • 目的:基于办公与互联网隔离,自带的office软件没有带本地帮助工具,因此在写vba程序时比较不方便(后来发现07有自带,心中吐血,瞎折腾些什么)。所以想到通过爬虫在官方摘录下来作为参考。所使工具:python3.7,...
  • 防止Windows自动锁屏的VBA脚本

    千次阅读 2017-07-07 10:13:55
    一个很简单的VBA脚本,可以防止Windows自动锁屏。 主要是利用了一个不常用的键 NUMLOCK。 ' 先定义一个Shell对象 Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 5000 wshShell.Send...
  • 常用vba功能汇总

    2020-04-02 17:53:56
    excel文件保存相关: Public Function fast_start(Optional ByVal displayalert = True) With Application .ScreenUpdating = False .Calculation = xlCalculationManual '.CalculateBeforeSav...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 752
精华内容 300
关键字:

sleepvba