吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 914|回复: 13
收起左侧

[其他原创] PPT VBA 加页码/总页码的比例进度条

[复制链接]
etkane 发表于 2024-8-19 10:15
公司电脑用不了其他工具,代码改哪里可以参考另一个帖子,还是比较简单的。
这个也是搬运加根据需要进行了改造,搬运的地址我实在不好找了,作者发现留个信息,我将备注。

[Visual Basic] 纯文本查看 复制代码
Sub ProgressBar()

    Dim mySlides As Slides
    Dim pageBar As ShapeRange
    Dim pageSHower As Shape
    Dim pageWidth, pageHeight, pageStep
    Dim MyArray() As Variant  '增加一个数组以便统计隐藏的幻灯片
    Dim i, j, k
    j = 0
    k = 0



    
    Set mySlides = Application.ActivePresentation.Slides

    pageWidth = Application.ActivePresentation.SlideMaster.Width
    pageHeight = Application.ActivePresentation.SlideMaster.Height
    ' pageStep = pageWidth / mySlides.Count

    ReDim MyArray(mySlides.Count, 0)
      On Error Resume Next
    For i = 1 To mySlides.Count '统计隐藏的幻灯片数
        ActivePresentation.Slides(i).Shapes("进度条").Delete '删除老的
        If mySlides.Item(i).SlideShowTransition.Hidden = True Then
            j = j + 1
            MyArray(i, 0) = 1
        Else
            MyArray(i, 0) = 0
        End If
    Next

    '除去首页和隐藏的幻灯片后计算进度条长度增量
    If mySlides.Count - 2 - j > 0 Then
        pageStep = (pageWidth - 60) / (mySlides.Count - 3 - j)
    Else
        pageStep = 0
    End If

    On Error Resume Next

    For i = 3 To mySlides.Count - 1  ' 改为从1开始
        k = k + MyArray(i, 0)      ' 计算当前隐藏的幻灯片数
        Set pageBar = mySlides.Item(i).Shapes.Range(Array())
        Set pageBar = _
           mySlides.Item(i).Shapes.Range(Array("进度条"))
        
        If IsNull(pageBar) Or pageBar.Count = 0 Then GoTo newBar
        Set pageSHower = pageBar.Item(1)
        GoTo nextPage

newBar:
        Set pageSHower = mySlides.Item(i).Shapes.AddShape( _
                           msoShapeRectangle, 0, _
                           pageHeight - 3, i * pageStep, 3)
        pageSHower.Name = "进度条"

nextPage:
        pageSHower.Fill.ForeColor.RGB = RGB(187, 222, 251)
        pageSHower.Line.Visible = msoFalse
        ' pageSHower.Width = i * pageStep
        ' 计算进度条长度时除去首页和隐藏的幻灯片
        pageSHower.Width = (i - 2 - k) * pageStep
        pageSHower.Top = pageHeight - 3
        pageSHower.Left = 0
        pageSHower.Height = 3
        ' 删除首页和隐藏的幻灯片的进度条
        If i = 1 Or MyArray(i, 0) = 1 Then pageSHower.Delete
    Next
End Sub

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
0120 + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jiujiukeji 发表于 2024-8-20 13:25

主要是 没看出有啥效果  在宏里执行了  不知道是没效果  还是没执行
lzspain 发表于 2024-8-19 10:46
感谢大佬分享,学习了!office的VBA功能确实强,只是某些批处理感觉比C还是要慢一点。
1270698424 发表于 2024-8-19 11:13
firethunder 发表于 2024-8-19 11:47
谢谢大佬分享!!
LuckyClover 发表于 2024-8-19 11:53
感谢分享,测试一下怎么样
jiujiukeji 发表于 2024-8-19 13:56
~不会用~~~~~~~~~~~
canghaisui 发表于 2024-8-19 16:16
谢谢大佬分享,能把用法普及一下吗,方便小白
agion 发表于 2024-8-19 21:23

谢谢大佬
 楼主| etkane 发表于 2024-8-20 11:18

用PPT里的宏
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表