ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 776|回复: 9

[求助] 按规范详细定义Dim,能降低PPT-VBA学习难度。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-1-26 14:46 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Dim Ppt As Objct
Dim Pres As Objct
Dim Sld As Object
使用objct自学编程比较难。


按规范详细定义Dim,自学编程难度会降低。
Dim Ppt As PowerPoint.Application
Dim Pres As Presentation
Dim Sld As Slide
dd.jpg



  1. Sub ll1()
  2.    Dim Ppt As PowerPoint.Application
  3.    Dim Pres As Presentation
  4.    Dim Sld As Slide
  5.    Dim ShpRng As ShapeRange
  6.    Dim Shp As Shape
  7.    Dim GrpChart As Graph.Chart
  8.    Dim GrpSht As Graph.DataSheet
  9.       Set Ppt = New PowerPoint.Application
  10.       Set Pres = Ppt.ActivePresentation
  11.       Set ShpRng = Ppt.ActiveWindow.Selection.ShapeRange
  12.       Debug.Print ShpRng.Name
  13.       Set GrpChart = ShpRng.OLEFormat.Object
  14.       Debug.Print GrpChart.Name
  15.       Set GrpSht = GrpChart.Application.DataSheet
  16.       Debug.Print GrpChart.Application.Parent.Name
  17.       Debug.Print GrpChart.Application.Parent.Application.Parent.Name
  18.       Debug.Print ShpRng.Parent.Name
  19.       Set Sld = ShpRng.Parent
  20.       With Sld
  21.            
  22.           .DisplayMasterShapes = msoTrue
  23.           With .Background
  24.               .Visible = msoTrue
  25.               .Fill.BackColor.RGB = RGB(200, 100, 20)
  26.               .Fill.Transparency = 0#
  27.               .Fill.Solid
  28.           End With
  29.       End With
  30.       Debug.Print Sld.Name
  31.       
  32.       With GrpSht
  33.           .Cells.Clear
  34.           For ii = 2 To 5
  35.               .Cells(ii, 1) = "A" & ii - 1
  36.               For jj = 2 To 9
  37.                  .Cells(1, jj) = "T" & jj - 1
  38.                  .Cells(ii, jj) = Int(Rnd(10) * 100)
  39.               Next jj
  40.           Next ii
  41.           .Font.Size = 50
  42.           .Width = 3000
  43.           .Font.FontStyle = "黑体"
  44.           Debug.Print .Font.Size, .Font.FontStyle, .Height, .Width
  45.           Debug.Print .Cells.ColumnWidth
  46.           .Cells(1, 1).ColumnWidth = 10
  47.           Debug.Print .Cells.ColumnWidth
  48.           Debug.Print .Width, .Height
  49.       End With
  50.       With GrpChart
  51.            .HasDataTable = True
  52.            .HasLegend = False
  53.            .HasTitle = True
  54.            .ChartType = xlLineMarkersStacked
  55.            For ii = 1 To 4
  56.                 With .SeriesCollection(ii).Border
  57.                      Debug.Print .Weight
  58.                      .Weight = 4 ' xlThick ' = xlThick
  59.                      .ColorIndex = Rnd(10)
  60.                      .LineStyle = xlContinuous
  61.                 End With
  62.                 .SeriesCollection(ii).MarkerSize = 8
  63.            Next ii
  64.       End With
  65. End Sub
复制代码


Ppt-VBA没有宏录制,excel-VBA录制的程序,调试程序没通过。

                With .SeriesCollection(ii).Border
                     Debug.Print .Weight
                     .Weight = 4 ' xlThick ' = xlThick
                     .ColorIndex = Rnd(10)
                     .LineStyle = xlContinuous
                End With
dd1.jpg

a.zip

71.17 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2023-1-26 19:28 | 显示全部楼层
直接定义实例化对象,需要前期绑定类库,好处是写代码的时候,有提示

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-26 22:17 | 显示全部楼层
dd.jpg


绑定库后,按规范定义,提高编程效率。
如Dim oChart As Chart,按提示编程使用方便。
with oChart
    ............
end with

  1. Sub dal()
  2.    Dim objChart As ChartObject
  3.    Dim oChart As Chart
  4.        For Each objChart In Sheet1.ChartObjects
  5.             Set oChart = objChart.Chart
  6.             With oChart
  7.                 Debug.Print .SeriesCollection.Count
  8.                 .ChartType = xlLineMarkers
  9.                 '.ChartType = xlColumnStacked
  10.                 .SeriesCollection(3).ChartType = xlColumnStacked
  11.                 For ii = 1 To .SeriesCollection.Count
  12.                        With .SeriesCollection(ii)
  13.                              .Border.ColorIndex = ii * 10 ' Int(Rnd(10) * 10)
  14.                              .Border.Weight = xlThick
  15.                              .MarkerSize = 7

  16.                              .Shadow = True
  17.                              '.Select
  18.                        End With
  19.                        'Selection.MarkerBackgroundColorIndex = 54
  20.                        'Selection.MarkerForegroundColorIndex = 10
  21.                 Next ii
  22.                
  23.                 .HasDataTable = True
  24.                 .HasLegend = False
  25.                 .HasAxis(xlCategory, xlPrimary) = True
  26.                 .HasAxis(xlValue, xlPrimary) = False
  27.                 .SeriesCollection(1).XValues = "=Graph!R1C1:R1C5"
  28.                 .SeriesCollection(1).Values = "=Graph!R2C1:R4C1"
  29.                 .SeriesCollection(2).XValues = "=Graph!R1C1:R1C5"
  30.                 .SeriesCollection(3).XValues = "=Graph!R1C1:R1C5"
  31.             End With
  32.        Next objChart
  33. End Sub
复制代码


a.zip

29.03 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2023-1-27 00:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-27 13:21 | 显示全部楼层

PowerPoint VBA编程手册-PowerPoint-ExcelHome技术论坛 -  https://club.excelhome.net/threa ... =0.7896558404647378
VBA图表基础教程-Excel VBA程序开发-ExcelHome技术论坛 -  https://club.excelhome.net/thread-1417686-1-1.html
dd.jpg


dd1.jpg




  1. Sub del()
  2.    Dim DateArr
  3.       DateArr = Array(0.344143518518518, 0.295590277777778, 0.305763888888889, 0.316655092592593, 0.28744212962963, 0.335081018518519, 0.301400462962963, 0.428032407407407, 0.751655092592593, 0.746076388888889, 0.731851851851852, 0.709282407407407, 0.639097222222222, 0.656782407407407, 0.762569444444444, 0.822488425925926)


  4.    
  5.    Dim oChart As Chart
  6.    Dim objChart As ChartObject
  7.    Dim Sht As Worksheet
  8.    Dim Rng As Range
  9.    Dim Grp As Graph.Application
  10.    Dim GrpSht As DataSheet
  11.    Dim GrpChart As Graph.Chart
  12.    Dim Shp As Shape
  13.    Dim ShpRng As ShapeRange
  14.    Dim ii, jj, Ss, Hh
  15.    

  16. Arr = Array(-4098, 78, 79, 60, 61, 62, -4100, 54, 55, 56, -4101, -4102, 70, 1, 76, 77, 57, 71, 58, 59, 15, 87, 51, 52, 53, 102, 103, 104, 105, 99, 100, 101, 95, 96, 97, 98, 92, 93, 94, -4120, 80, 4, 65, 66)
  17.    
  18.        Set Sht = Sheet2
  19.        For Each Shp In Sht.Shapes
  20.             'Debug.Print Shp.Name
  21.             Shp.Delete
  22.        Next Shp
  23.   For ii = 0 To 45 'UBound(Arr)
  24.        Set GrpChart = Sht.OLEObjects.Add(ClassType:="MSGraph.Chart.8", Link:=False, DisplayAsIcon:=False).Object
  25.        Set Shp = Sht.Shapes(Sht.Shapes.Count)
  26.        With Shp
  27.            '.Width = 1800
  28.            .Height = 300
  29.            
  30.            If ii Mod 2 = 1 Then
  31.                .Left = 4
  32.                Hh = (ii + 1) * 160
  33.            ElseIf ii Mod 2 = 0 Then
  34.                .Left = 4 + 440
  35.                Hh = (ii - 0) * 160
  36.            End If
  37.            .Top = 4 + Hh
  38.        End With
  39.        ''
  40.        With GrpChart
  41.             ''
  42.             Set GrpSht = .Application.DataSheet
  43.             With GrpSht
  44.                 For jj = 1 To 8
  45.                     GrpSht.Cells(1, jj + 1) = "A" & jj
  46.                 Next jj
  47.                 ''
  48.                 For jj = 0 To 7
  49.                     GrpSht.Cells(2, jj + 2) = Format(DateArr(jj), "hh:mm:ss")
  50.                     GrpSht.Cells(3, jj + 2) = Format(DateArr(jj + 8), "hh:mm:ss")
  51.                     Ss = DateArr(jj + 8) - DateArr(jj)
  52.                     GrpSht.Cells(4, jj + 2) = Format(Ss, "hh:mm:ss")
  53.                 Next jj
  54.                 .Application.Chart.ChartType = Arr(ii)  'xlLineMarkersStacked ' Arr(9)(0)
  55.             End With
  56.             .HasDataTable = True
  57.             .HasLegend = False
  58.             .HasAxis(xlCategory, xlPrimary) = True
  59.             .HasAxis(xlValue, xlPrimary) = False
  60.        End With
  61.    Next ii
  62. End Sub
复制代码












a.zip

357.61 KB, 下载次数: 9

aa.zip

232.55 KB, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-1 15:27 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2023-2-4 23:35 编辑

Sub ExcelMSGraphChart8修改图表数据()
    '创建图表时使用
    Set Myole = ActiveSheet.Shapes.AddOLEObject( _
    "MSGraph.Chart.8", , 1, , , , ,10,10,218,128)
    '图表名称
    Myole.Name = "myole"
    '修改图表时使用
    'Set Myole = ActiveSheet.Shapes("myole")
     '选中图表
     Myole.Select
    '数据表对象
    Set Mycha = Myole.OLEFormat.Object.Object
    '数据表
    Set Mysh = Mycha.Application.DataSheet
    '修改数据表
    For i = 2 To 4
       For j = 2 To 5
           Msh.Cells(i, j) = CStr(i + j)
       Next
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2023-2-2 16:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-2 17:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

很感兴趣,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-2 22:36 | 显示全部楼层

Ppt的一级套一级的关系" & vbCr & "把人搞的晕晕乎乎老出错
dd.jpg


  1. Sub del()
  2.    Dim DateArr
  3.       DateArr = Array(0.344143518518518, 0.295590277777778, 0.305763888888889, 0.316655092592593, 0.28744212962963, 0.335081018518519, 0.301400462962963, 0.428032407407407, 0.751655092592593, 0.746076388888889, 0.731851851851852, 0.709282407407407, 0.639097222222222, 0.656782407407407, 0.762569444444444, 0.822488425925926)


  4.    
  5.    Dim oChart As Chart
  6.    Dim XlWk As Workbook
  7.    Dim Sht As Worksheet
  8.    Dim Rng As Range
  9.    Dim Grp As Graph.Application
  10.    Dim GrpSht As DataSheet
  11.    Dim GrpChart As Graph.Chart
  12.    Dim ii, jj, Ss, Hh
  13.    Dim Pres As Presentation
  14.    Dim Sld As Slide
  15.    Dim Shp 'As Shape
  16.    Dim ShpRng As ShapeRange
  17.        Set Pres = Application.ActivePresentation
  18.        If Pres.Slides.Count >= 1 Then
  19.          For ii = Pres.Slides.Count To 1 Step -1
  20.                Set Sld = Pres.Slides(ii)
  21.                Sld.Delete
  22.          Next ii
  23.        End If
  24.        For Each Shp In Pres.Slides
  25.              'Shp.Delete
  26.        Next Shp
  27.        Stop
  28.        ''
  29.        Arr = Array(-4098, 78, 79, 60, 61, 62, -4100, 54, 55, 56, -4101, -4102, 70, 1, 76, 77, 57, 71, 58, 59, 15, 87, 51, 52, 53, 102, 103, 104, 105, 99, 100, 101, 95, 96, 97, 98, 92, 93, 94, -4120, 80, 4, 65, 66)
  30.    
  31.        ''
  32.        For ii = 0 To 2 '44 'UBound(Arr)
  33.            Set Sld = Pres.Slides.Add(ii + 1, ppLayoutBlank)
  34.            Set Shp = Sld.Shapes.AddOLEObject(Left:=50, Top:=180, Width:=700, Height:=320, ClassName:="MSGraph.Chart", Link:=msoFalse)
  35.            ''
  36.            Set GrpChart = Shp.OLEFormat.Object
  37.            Debug.Print GrpChart.Name
  38.            ''
  39.            With GrpChart
  40.                 ''
  41.                 Set GrpSht = .Application.DataSheet
  42.                 With GrpSht
  43.                     For jj = 1 To 8
  44.                        GrpSht.Cells(1, jj + 1) = "A" & jj
  45.                     Next jj
  46.                     ''
  47.                     For jj = 0 To 7
  48.                          GrpSht.Cells(2, jj + 2) = Format(DateArr(jj), "hh:mm:ss")
  49.                          GrpSht.Cells(3, jj + 2) = Format(DateArr(jj + 8), "hh:mm:ss")
  50.                          Ss = DateArr(jj + 8) - DateArr(jj)
  51.                          GrpSht.Cells(4, jj + 2) = Format(Ss, "hh:mm:ss")
  52.                     Next jj
  53.                     .Application.Chart.ChartType = Arr(ii)  'xlLineMarkersStacked ' Arr(9)(0)
  54.                 End With
  55.                 .HasDataTable = True
  56.                 .HasLegend = False
  57.                 .HasTitle = True
  58.                 .HasAxis(xlCategory, xlPrimary) = True
  59.                 .HasAxis(xlValue, xlPrimary) = False
  60.             
  61.                 .ChartTitle.Text = "Ppt的一级套一级的关系" & vbCr & "把人搞的晕晕乎乎老出错"
  62.                
  63.            End With
  64.        Next ii
  65. End Sub
复制代码






您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 12:38 , Processed in 0.046955 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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