VBA PPT NOTE

hashmap dict enum在VBA中的不同点

在解决一个两组数据的匹配的问题的时候,想到在算法图解中介绍的hashmap的算法,如果将这两组数据都作为数组来处理,其效率应该不会比hashmap的映射来的更快,从O(n)变为O(1)的问题

然后想到了dict的方法,但VBA也支持enum,想要知道两种方法那种效率更高。

PPT中对象的层次关系

application-presentations-slides-shapes
Shapes-ShapeRange-Shape
  • Shapes collection to creae shapes and when you want to iterate all the shapes on a slide
  • you use the Shape object when you want to modify a single shape
  • you use the ShapeRange collection when you want to modify shapes the same way you can work with multiple selected shapes in the user interface.
Shape-table-cell

table 隶属于 Shape

'create table in shapes
ActivePresentation.Slide(2).Shapes _
  .AddTable NumRows:=3, NumColumns:=4, Left:=10, _
  Top:=10, Width:=288, Height:=288

'Useing HasTable to test whether a shape is tabel

'Table 的rows属性可以进行Cells遍历
shape(i).Table.rows(j).cells
MsoShapeType Enumeration

这里列举了所有的shape的类型,通过shape.type获得类型具体如下表

名称 说明
msoAutoShape 1 自选图形。
msoCallout 2 标注。
msoCanvas 20 画布。
msoChart 3 图。
msoComment 4 批注。
msoContentApp 27 内容的 Office 加载项
msoDiagram 21 图表。
msoEmbeddedOLEObject 7 嵌入的 OLE 对象。
msoFormControl 8 窗体控件。
msoFreeform 5 任意多边形。
msoGraphic 28 图形
msoGroup 6 组合。
msoIgxGraphic 24 SmartArt 图形
msoInk 22 墨迹。
msoInkComment 23 墨迹批注。
msoLine 9 线条。
msoLinkedGraphic 29 链接的图形
msoLinkedOLEObject 10 链接 OLE 对象。
msoLinkedPicture 11 链接图片。
msoMedia 16 媒体
msoOLEControlObject 12 OLE 控件对象。
msoPicture 13 图片
msoPlaceholder 14 占位符
msoScriptAnchor 18 脚本定位标记。
msoShapeTypeMixed -2 混和形状类型。
msoTable 19 表。
msoTextBox 17 文本框。
msoTextEffect 15 文本效果。
msoWebVideo 26 Web 视频
获取地址

application.path 获得应用软件的地址,特别的在PPT中为PowerPoint应用的地址
C:\Program Files (x86)\Microsoft Office\Office15
presentation.path 获得ppt文档的地址
D:\file1\file2\target_file

Save\SaveAs\SaveCopyAs的区别

Save在当前文件目录下保存
SaveAs在当前目录下或目标目录下保存文件,运行的文件保存后名字自动变更为目标文件名(含地址)
SaveCopyAs必须带参数,保存后,当前的运行的文件不会替换为保存的目标文件,相当于该保存是作为对当前文件的备份

Collection object的区别

Collection 也是一个对象(Object)
Link1

Collection 与Dictionary的区别

Link
Dictionary的效率比Collection的效率更高

DocumentWindow

???

Option Explicit

Sub exchangeElPpt()

'read sheet data
Dim dataRngPH As Range
Dim dataRngTS As Range
Set dataRngPH = Sheet1.Range("a2:a14")
Set dataRngTS = Sheet1.Range("b2:b14")
'Debug.Print dataRng(1, 2).Format


Dim pptAPP As Object
Dim pptPres As Object
Dim pptName As String

pptName = "PPTtemplate.pptx"

Set pptAPP = CreateObject("powerpoint.application")
Set pptPres = pptAPP.presentations.Open(ThisWorkbook.Path & "\" & pptName)

Dim sl
Dim sh
Dim irow As Integer
Dim jcol As Integer
Dim i As Integer
Dim j As Integer
Dim irng As Range
Dim shapeText As String

'For Each sl In pptPres.slides

Set sl = pptPres.slides(1)
    For Each sh In sl.Shapes

        If sh.HasTextFrame Then

            Debug.Print sl.Name & vbTab & sh.Name & vbTab & sh.TextFrame.TextRange.Text

        ElseIf sh.HasTable Then

            irow = sh.Table.Rows.Count
            jcol = sh.Table.Columns.Count

            For i = 1 To irow
                For j = 1 To jcol
                    If sh.Table.Cell(i, j).Shape.HasTextFrame Then
                        shapeText = sh.Table.Cell(i, j).Shape.TextFrame.TextRange.Text
                        For Each irng In dataRngPH
                            If shapeText = irng.Text Then
                                Debug.Print "True"
                                sh.Table.Cell(i, j).Shape.TextFrame.TextRange.Text = irng.Offset(0, 1).Text
                            End If
                        Next
                            Debug.Print sl.Name & vbTab & sh.Name & vbTab & sh.Table.Cell(i, j).Shape.TextFrame.TextRange.Text
                    End If
                Next
            Next

        End If
    Next
'Next


End Sub
Debug.Print "==Slides In this presentation=="

For Each sl In pptPres.slides
    Debug.Print sl.Name
Next


Debug.Print "==Target slide=="


Set sl = pptPres.slides("Slide3")
Debug.Print sl.Name

Dim tableTop As Single
Dim tableLeft As Single
Dim tableWidth As Single
Dim tableHeight As Single

For Each sh In sl.Shapes

    If sh.Name = "Table 3" Then
        tableTop = sh.Top
        tableLeft = sh.Left
        tableWidth = sh.Width
        tableHeight = sh.Height
        Debug.Print sh.Top & vbTab & sh.Left & vbTab & sh.Width & vbTab & sh.Height
        sh.Delete
    End If
    
    'Debug.Print sh.Name
    
    'sh.Name
    'Title 1
    'Footer Placeholder 2
    'Table 3

Next

Dim pasteRng As Range
Dim targetShape

Set pasteRng = Sheet2.Range("A1:R59")
pasteRng.Copy

Set targetShape = sl.Shapes.Paste


'设置黏贴入的table的字体格式,设置为大小7,Arial格式
irow = targetShape.Table.Rows.Count
jcol = targetShape.Table.Columns.Count


For i = 1 To irow
    For j = 1 To jcol
        If targetShape.Table.Cell(i, j).Shape.HasTextFrame Then
            With targetShape.Table.Cell(i, j).Shape.TextFrame.TextRange.Font
                .Size = 7
                .Name = "Arial"
            End With
        End If
    Next
Next

'调整table的上边距举例及高度

targetShape.Height = tableHeight
targetShape.Top = tableTop

Debug.Print targetShape.Top & vbTab & targetShape.Left & vbTab & targetShape.Width & vbTab & targetShape.Height

'可以对table这个shape进行命名
targetShape.Name = "fsTable"
Debug.Print targetShape.Name
Slides(?)的参数

在slides的collection中,其参数如果使用数字1,2,3,4,ect. 代表PPT中幻灯片的显示位置
如果使用"slide名"则根据slide.Name属性来调用该Slide
link1

Slide

.Hyperlinks属性

Returns a Hyperlinks collection that represents all the hyperlinks on the specified slide. Read-only.

.Master属性

Returns a Master object that represents the slide master. Read-only.

.SlideId属性

Returns a unique ID number for the specified slide. Read-only.

using the FindBySlideID method with the slide's ID number can be a more reliable way to return a specific Slide object from a Slides collection than using the Item method with the slide's index number.

.SlideId /.SlideIndex /.SlideNumber的区别

???疑问点

  • 从外部黏贴的机制
  • 在ppt内部复制黏贴的注意点
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,322评论 0 10
  • 本人大三(妹纸),在外地上学,家中有个比自己小六岁的弟弟。去年十一在成都玩的时候在熊猫邮局写了一张明信片给弟弟,因...
    小思路阅读 454评论 0 1
  • 最近在刘嘉玲的微博上看到了她的品牌ANIRAC的模特走秀图片,第一感觉衣服简洁用色纯,普通人也可以穿出去。即有女性...
    小黑龙喜欢花阅读 1,457评论 0 0
  • 钱是赚不完的, 人是有局限的。 生活是不容易的, 只有发胖比较容易。
    小米在家写小说阅读 426评论 0 0
  • 出了乐器厂里的流水线,我和兄弟姐妹们就被打包到不同的包装箱内。根据材质成本的高低,我们被分成专业琴、练习琴和普通琴...
    未可_Win阅读 540评论 2 27