VBA 进度条(2)

news2024/10/6 0:32:56

1.前提

1-1. 在VBA编辑器找到工具-引用-勾选MicroSoft Visual Basic for Applications Extensibility Library
1-2. 信任中心 -> 宏设置 -> 开发人员宏设置 -> 选中“信任对VBA工程对象模型的访问”

2.类模块

Private objApp                  As Object
Private uForm                   As Object
Private lbl1                    As Object
Private lbl2                    As Object
Private FormName                As String

Private Const GWL_STYLE         As Long = (-16)
Private Const WS_CAPTION        As Long = &HC00000
Private Const BarLength         As Long = 300

#If Win64 Then
    Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Private Sub Class_Initialize()
    t = Timer
    ms = t - Int(t)
    FormName = "FORM" & Format(Now, "yyyymmddhhmmss") & Replace(ms, ".", "")
End Sub

Public Sub ShowBar()
    CreateProgressBar
End Sub

Public Sub DestroyBar()
    If uForm Is Nothing Then
        Exit Sub
    End If
    Unload uForm
    RemoveModual FormName
    Set uForm = Nothing
    Set objApp = Nothing
End Sub

Public Sub ChangeProcessBarValue(value As Double, Optional message As String = "")
On Error Resume Next

    lbl1.Width = Int(value * BarLength)
    lbl2.Caption = IIf(message = "", Format(value, "恑搙丗0.00%"), message)
    DoEvents
    
End Sub

Public Sub SleepBar(ms As Long)
    Sleep ms
End Sub

Private Sub CreateProgressBar()

    Dim UsForm  As Object
    
    If InStr(1, Application.Name, "Word") > 0 Then
        Set objApp = ThisDocument
    ElseIf InStr(1, Application.Name, "Excel") > 0 Then
        Set objApp = ThisWorkbook
    End If

    RemoveModual FormName
    
    Set UsForm = objApp.VBProject.VBComponents.Add(vbext_ct_MSForm)
    With UsForm
        .Properties("Caption") = "UserForm"
        .Properties("Name") = FormName
        .Properties("Height") = 30
        .Properties("Width") = BarLength
        .Properties("BackColor") = RGB(240, 240, 240)
        .Properties("SpecialEffect") = fmSpecialEffectFlat
        .Properties("BorderStyle") = fmBorderStyleNone
    End With

    Set uForm = VBA.UserForms.Add(FormName)
    
    With uForm
        Set lbl1 = .Controls.Add("Forms.Label.1", "Label1", True)
        With lbl1
            .Left = 0
            .Top = 12
            .Height = 12
            .Width = 0
            .Caption = ""
            .BackColor = RGB(0, 0, 255)
            .BorderStyle = fmBorderStyleNone
            .BackStyle = fmBackStyleOpaque
            .BorderColor = .BackColor
            .ZOrder 1
        End With
        
        Set lbl2 = .Controls.Add("Forms.Label.1", "Label1", True)
        With lbl2
            .Left = 0
            .Top = 0
            .Height = 12
            .Width = BarLength
            .Caption = ""
            .TextAlign = fmTextAlignLeft
            .Font.Size = 9
            .Font.Bold = False
            .Font.Italic = False
            .Font.Name = "Meiryo UI"
            .ForeColor = RGB(0, 0, 0)
            .BorderStyle = fmBorderStyleNone
            .BackStyle = fmBackStyleTransparent
            .ZOrder 0
        End With
        
        RemoveFormCaption uForm
        uForm.Show vbModeless
        
    End With
    
End Sub

Private Sub RemoveModual(n As String)
On Error Resume Next
    objApp.VBProject.VBComponents.Remove objApp.VBProject.VBComponents(n)
    objApp.Save
End Sub


Private Sub RemoveFormCaption(FORM As Object)

    If Val(Application.Version) < 9 Then
        hwnd = FindWindow("ThunderXFrame", FORM.Caption)
    Else
        hwnd = FindWindow("ThunderDFrame", FORM.Caption)
    End If
    IStyle = GetWindowLong(hwnd, GWL_STYLE)
    IStyle = IStyle And Not WS_CAPTION
    SetWindowLong hwnd, GWL_STYLE, IStyle
    DrawMenuBar hwnd
    
End Sub

3.测试代码

Sub Process()
    Dim i As Long
    Dim pb As New ProcessBar
    
    Dim intSum, intCount As Long
    
    intSum = 256
    intCount = 0
    
    pb.ShowBar
    
    For i = 1 To intSum
        pb.SleepBar (100)
        intCount = intCount + 1
        pb.ChangeProcessBarValue (intCount / intSum)
    Next i
    
     Stop
    
    pb.DestroyBar
    
    
End Sub

4.运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1869313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国行版苹果Vision Pro即将发售 高昂定价吓退普通消费者?

2024年2月2日&#xff0c;苹果第一代空间计算设备Vision Pro在美国上市。6月28日&#xff0c;国行版苹果Vision Pro也将正式发售&#xff0c;别为256GB版29999元、512GB版31499元、1TB版32999元。不过从此前Vision Pro预售情况来看&#xff0c;Vision Pro的“杀手锏”在“价格”…

基于JSP的书店仓库管理系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#xff1a;ECLIPSE、Tomcat 系统展示 首页 管理员功能模块…

简过网:上万元的学费,考公到底要不要报个培训班?

考公报不报班一直是很多朋友比较纠结一件事&#xff0c;报班了学费太贵&#xff0c;不报班又怕考不上&#xff0c;如果你也有这种困扰&#xff0c;那么&#xff0c;不妨看看这篇文章&#xff01; 首先&#xff0c;对于报班VS自学这个问题&#xff0c;小编的建议是&#xff1a;…

MES管理系统的实施难点以及解决方案

随着智能制造的浪潮席卷全球&#xff0c;MES管理系统成为了众多制造企业提升竞争力的关键武器。MES管理系统以其强大的功能&#xff0c;能够有效连接企业的上层ERP系统与底层自动化设备&#xff0c;实现生产过程的实时监控与优化。然而&#xff0c;实施MES管理系统并非一帆风顺…

TIMESTAMP 和DATETIME 的区别

DATETIME类型 存储范围&#xff1a;DATETIME类型可以存储从1000-01-01 00:00:00到9999-12-31 23:59:59的日期和时间值&#xff0c;精度可以达到微秒级别。时区处理&#xff1a;DATETIME类型不与特定时区关联。它直接存储你提供的日期和时间值&#xff0c;不包含任何时区信息。…

SSM超市管理系统-计算机毕业设计源码10428

目 录 摘要 1 绪论 1.1 研究意义 1.2国内外研究现状 1.3论文结构与章节安排 2 超市管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 …

Arduino平台软硬件原理及使用——SR04超声波传感器的使用

文章目录&#xff1a; 一、超声波传感器工作原理 二、SR04超声波库的使用 三、SR04超声波传感器在Arduino中的使用 一、超声波传感器工作原理 如上图所示&#xff1a;HCSR04超声波传感器拥有4个针脚&#xff0c;除了VCC接正极、GND接负极外&#xff0c;还有两个引脚“Trig”及“…

vue-主题切换

themeName/index.vue页面: <template><div class"theme-view"><div click"themeClick" class"theme-btn">切换颜色</div><br>{{themeName white ? 白色 : 深色}}主题页面</div> </template><sc…

pytorch统计学分布

1、pytorch统计学函数 import torcha torch.rand(2,2) print(a) print(torch.sum(a, dim0)) print(torch.mean(a, dim0)) print(torch.prod(a, dim0))print(torch.argmax(a, dim0)) print(torch.argmin(a, dim0)) print(torch.std(a)) print(torch.var(a)) print(torch.median…

UE4 Unlua的快速使用

目录 Unlua的使用前言下载Unlua插件插件安装快速入门语法汇总模块导入多行字符串官方静态方法调用蓝图方法调用重载蓝图中的方法主动调用被重载的蓝图方法输入绑定动态绑定Lua脚本委托容器使用 延迟与协程的使用C 调用Lua 静态导出自定义类型到Lua使用网络UMG资源释放自定义加载…

秋招季的策略与行动指南:提前布局,高效备战,精准出击

6月即将进入尾声&#xff0c;一年一度的秋季招聘季正在热火进行中。对于即将毕业的学生和寻求职业发展的职场人士来说&#xff0c;秋招是一个不容错过的黄金时期。 秋招的序幕通常在6月至9月间拉开&#xff0c;名企们纷纷开启网申的大门。在此期间&#xff0c;求职备战是一个系…

SaaS客户裂变:如何构建合作伙伴的双向沟通桥梁

在SaaS行业中&#xff0c;客户裂变不仅是增长的关键&#xff0c;更要求与合作伙伴之间建立稳固的沟通桥梁。如何构建合作伙伴双向沟通的桥梁&#xff0c;真正做到理解对方的价值需求&#xff0c;实现长期合作共赢呢&#xff1f; 一、明确价值共享 首先&#xff0c;确保双方明…

git 初基本使用-----------笔记(结合idea)

Git命令 下载git 打开Git官网&#xff08;git-scm.com&#xff09;&#xff0c;根据自己电脑的操作系统选择相应的Git版本&#xff0c;点击“Download”。 基本的git命令使用 可以在项目文件下右击“Git Bash Here” &#xff0c;也可以命令终端下cd到指定目录执行初始化命令…

Windows环境本地部署开源在线演示文稿应用PPTist并实现远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Shopee本土店选品有什么技巧?EasyBoss ERP为你整理了6个高效选品的方法!

电商圈有句话叫&#xff1a;七分靠选品&#xff0c;三分靠运营&#xff0c;选品对了&#xff0c;事半功倍&#xff0c;选品错了&#xff0c;功亏一篑&#xff01; 很多卖家都会为选品发愁&#xff0c;特别对于Shopee本土店卖家来说&#xff0c;要囤货到海外仓&#xff0c;如果…

六西格玛黑带培训:技能进阶与薪资增长的助推器

在快速变化的职场环境中&#xff0c;不断寻求自我提升与突破成为了每一位职场人士的重要课题。六西格玛黑带培训作为质量管理领域的精英认证&#xff0c;它不仅代表着个人技能的提升&#xff0c;更意味着职业发展道路上的新机遇和薪资水平的飞跃。 六西格玛黑带培训&#xff…

KubeSphere容器平台本地部署并实现无公网IP远程监控集群

文章目录 前言1. 部署KubeSphere2. 本地测试访问3. Linux 安装Cpolar4. 配置KubeSphere公网访问地址5. 公网远程访问KubeSphere6. 固定KubeSphere公网地址 前言 本文主要介绍如何在Linux CentOS搭建KubeSphere并结合Cpolar内网穿透工具&#xff0c;实现远程访问&#xff0c;根…

Spring框架FactoryBean接口的作用和应用

一、FactoryBean源码解读 FactoryBean<T> 是 Spring 框架 beans.factory包中的一个接口&#xff0c;从字面意思可以理解为工厂bean&#xff0c;它是干什么的&#xff0c;类名上的泛型又是指什么&#xff0c;有什么作用&#xff1f; 注释看不懂没关系&#xff0c;先看一…

敏源-数字高精度温度探头可替代传统PT100/1000

传统模拟温度探头成本高、功耗高、数据采集不方便&#xff0c;而由工采网代理的敏源0.1℃数字温度探头&#xff0c;可替代传统的PT100/1000或升级热敏电阻探头&#xff1b;可应用于冷链、仓储、医疗、工业等低温/室温/高温高精度温度采集场景。 PT100温度传感器需要复杂的采集电…

BMS绝缘检测方案

目前已有绝缘检测方案大都类似&#xff0c;我想分享一下&#xff0c;同时也想提出一个问题&#xff1a;在总压1500V的时候&#xff0c;检测100K以下的阻值有什么很好的方案吗&#xff1f;希望有懂行的人能给予帮助&#xff0c;万分感谢&#xff01;&#xff01;&#xff01; 我…