ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA在PPT中批量替换的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-19 22:03 | 显示全部楼层 |阅读模式
我想使用VBA在PPT中批量替换文字,比如A换成1,B换成2,C换成3。。。。。。一直到很多,大概就是CTRL+H的意思
然后在网上搜索了一下


Sub 宏1()
    Dim i, ctrl
    '下一行是查找和替换的内容,依次成对填写
    ctrl = Array("A", "1", "B", "2", "C", "3")
    For i = LBound(ctrl) To UBound(ctrl) - 1 Step 2
        Cells.Replace What:=ctrl(i), Replacement:=ctrl(i + 1), LookAt:=xlPart, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Next i
End Sub



并不能用,运行错误,424要求对象

请教,这个应该怎么改

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-19 22:32 | 显示全部楼层
或者这样,怎么把下面这个改成可以连续替换的,比如A换1,B换2,C换3。。。。。。等等等等

Sub yy()
Dim a As Slide
Dim s As Shape

For Each a In ActivePresentation.Slides
    For Each s In a.Shapes
      If s.HasTextFrame Then
        With s.TextFrame
            If .TextRange.Text = "源数据" Then
                If .HasText Then .TextRange.Text = "十二"
            End If
        End With
      End If
    Next
Next

End Sub

TA的精华主题

TA的得分主题

发表于 2020-4-24 12:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-3-16 22:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-3-18 14:20 | 显示全部楼层
这个连接尝试了,在PPT宏运行正常,但是封装到vb6中,无法封装成dll,封装过程提示HasTable“未找到方法或数据成员”
各个网站搜索了,找不到HasTable对应的解决方案。

TA的精华主题

TA的得分主题

发表于 2023-8-1 22:28 | 显示全部楼层
3楼提供的链接太给力啦,正好遇到替换表格中文字的需求,搬运了下代码,仅加了一个set就可以正常运行:

  1. '仅针对表格内容替换
  2. If shp.HasTable Then

  3.         'give name to table
  4.         Set tbl = shp.Table

  5.         'loops on table rows and columns:遍历行列
  6.         For i_tb = 1 To shp.Table.Rows.Count
  7.             For j_tb = 1 To shp.Table.Columns.Count

  8.                 'Store cell text into a variable
  9.                 '注意此处要用set,否则变量为文本,无法正常进行后文的替换修改
  10.                 '前文尝试对ShpTxt、TmpTxt设置为TextRange对象,但不set仍会报错
  11.                 Set ShpTxt = tbl.Cell(i_tb, j_tb).Shape.TextFrame.TextRange


  12.                   'Ensure There is Text To Search Through
  13.                   If ShpTxt <> "" Then
  14.                     
  15.                      'Store text into a variable
  16.                     'Set ShpTxt = shp.TextFrame.TextRange

  17.                      'Find First Instance of "Find" word (if exists)
  18.                      Set TmpTxt = ShpTxt.Replace( _
  19.                       FindWhat:=str1, _
  20.                       Replacewhat:=mystr, _
  21.                       WholeWords:=False)

  22.                      'Find Any Additional instances of "Find" word (if exists)
  23.                       Do While Not TmpTxt Is Nothing
  24.                         Set ShpTxt = ShpTxt.Characters(TmpTxt.Start + TmpTxt.Length, ShpTxt.Length)
  25.                         Set TmpTxt = ShpTxt.Replace( _
  26.                           FindWhat:=str1, _
  27.                           Replacewhat:=mystr, _
  28.                           WholeWords:=False)
  29.                       Loop
  30.                      
  31.                   End If


  32.              Next j_tb
  33.         Next i_tb
  34. End If
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-19 20:00 , Processed in 0.042613 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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