ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用VBA导出PPT段落中段首空了多少距离?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-27 10:03 | 显示全部楼层 |阅读模式
PPT中段落可以用标尺调整,也可以直接多空几个空格表示段首。想知道用VBA怎么获取段首空了多少空格或距离?
求教了。

TA的精华主题

TA的得分主题

发表于 2016-7-12 23:58 | 显示全部楼层
看看还能在哪里查到!写了多少天,一直未发表。
  1. Private Sub CommandButton1_Click() '段落中段首空了多少空格
  2. Dim str1 As String
  3. Set shp = ActiveWindow.Selection.ShapeRange
  4. str1 = Len(shp.TextFrame.TextRange.Characters)
  5. str2 = Len(LTrim(shp.TextFrame.TextRange.Characters))
  6. MsgBox str1 - str2
  7. End Sub
复制代码

你所说的几个贴都是我写的,只不过又换了名字而已。所有的知识都大同小异,几乎都是我模仿你,你模仿我。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-23 14:27 | 显示全部楼层
本帖最后由 小鸟向前飞 于 2016-7-23 14:52 编辑
dongdonggege 发表于 2016-7-12 23:58
看看还能在哪里查到!写了多少天,一直未发表。

你所说的几个贴都是我写的,只不过又换了名字而已。所有 ...

多谢大神!

TA的精华主题

TA的得分主题

发表于 2016-7-24 11:31 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-2 13:34 | 显示全部楼层
本帖最后由 小鸟向前飞 于 2016-8-2 15:24 编辑
dongdonggege 发表于 2016-7-12 23:58
看看还能在哪里查到!写了多少天,一直未发表。

你所说的几个贴都是我写的,只不过又换了名字而已。所有 ...

大神,我试了一下这个方法,当在段首有空格时,可以得到空格的个数。挺好的。
现在有另外一个疑问,怎么能得到首行缩进的数据呢?我看paragraphFormat里面没有啊 2.png

TA的精华主题

TA的得分主题

发表于 2016-8-3 17:04 | 显示全部楼层
本帖最后由 dongdonggege 于 2016-8-3 17:05 编辑

1、请不要叫我大神,我的技术等级是初级,我只是个vba的痴迷者,大家以朋友相称。如你能高抬我,我叫我老师吧。
2、以我目前的水平,我知道只有word中有“首行缩进”(或段首缩进)这个名词,excel和ppt均没有,也许是我孤陋寡闻。
3、既然ppt中没有“段首缩进”(暂时这么认为吧,或许这个名称比较恰当),那我们又想“段首缩进”,难道就没有方法了吗?
4,、方法是人想出来的,我们可以模仿word的这个功能,我对word vba接触较少,也是看了你的要求后,现学现卖的。
段首缩进,就是光标所在的行的段首空2个字符,不知这样的理解是否正确?word中是这样的:
  1. Sub 段首缩进2字符()
  2. With Selection.ParagraphFormat
  3.     Selection.ParagraphFormat.CharacterUnitFirstLineIndent = 2  '设置段首缩进2字符
  4. End With
  5. End Sub

  6. Sub 首行缩进2字符()
  7. 'WORD文档中的第三段落实现首行缩进2字符
  8. Dim MyParagraph As Range
  9. Set MyParagraph = ActiveDocument.Range(ActiveDocument.Paragraphs(3).Range.Start, ActiveDocument.Paragraphs(3).Range.End)
  10. If (MyParagraph.ParagraphFormat.CharacterUnitFirstLineIndent = 2) Then
  11.     MsgBox "首行已经缩进"
  12. Else
  13.     MsgBox "首行未缩进"
  14. MyParagraph.ParagraphFormat.CharacterUnitFirstLineIndent = 2
  15. End If
  16. End Sub
复制代码

步骤:
①选择需要的文本框
Set shp = ActiveWindow.Selection.ShapeRange(1)
②判断文本框段首字符,这要根据具体情况,这儿最复杂
str3 = shp.TextFrame.TextRange.Characters '
If LTrim(Left(str3, 1)) > 0 And LTrim(Left(str3, 1)) < 64
③如果段首是汉字,则空4个字符,如果是数字(或英文),则空2个字符。
If Asc(Left(str3, 1)) < 0 Then '中文
不好意思,我最近较忙,给你两个程序,你自己修改,或模仿,最主要是判断
  1. Sub 文本框首个字符判断() '
  2.     Set shp = ActiveWindow.Selection.ShapeRange(1) '选择的文本框
  3.     str1 = Len(shp.TextFrame.TextRange.Characters) '字符串长度
  4.     str2 = Len(LTrim(shp.TextFrame.TextRange.Characters)) '字符串去掉空格后的长度
  5.     str3 = shp.TextFrame.TextRange.Characters '
  6.    
  7.     If Asc(Left(str3, 1)) < 0 Then '中文
  8.         MsgBox "第1个字符是中文"
  9.     End If
  10.    
  11.     If IsNumeric(Left(str3, 1)) = True Then '数字
  12.         MsgBox "第1个字符是数字"
  13.     End If
  14.    
  15.     If Asc(Left(str3, 1)) >= 65 And Asc(Left(str3, 1)) <= 122 Then '英文
  16.         MsgBox "第1个字符是英文"
  17.     End If
  18.    
  19.     If LTrim(Left(str3, 1)) > 0 And LTrim(Left(str3, 1)) < 64 Then
  20.         MsgBox "第1个字符是空格"
  21.         MsgBox "共有" & str1 - str2 & "个空格"
  22.     End If
  23. End Sub
复制代码
  1. Sub 段首缩进()
  2.     Set shp = ActiveWindow.Selection.ShapeRange(1) '选择的文本框
  3.     str1 = Len(shp.TextFrame.TextRange.Characters) '字符串长度
  4.     str2 = Len(LTrim(shp.TextFrame.TextRange.Characters)) '字符串去掉空格后的长度
  5.     str3 = shp.TextFrame.TextRange.Characters '
  6.    
  7.     If str1 - str2 = 0 Then '判断段首是否有空格
  8.         With shp.TextFrame.TextRange
  9.         str4 = shp.TextFrame.TextRange.Characters(Start:=1, Length:=0) '光标放在字符串第1个字符前
  10.             .Text = "  " & str3 '段首添加2个空格
  11.         End With
  12.     End If
  13.    
  14. End Sub
复制代码

不知道能否帮到你,到此为止吧

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-3 17:27 | 显示全部楼层
自问自答一下,应该叫首行缩进,不是段首缩进,楼上的办法可以处理使用空格模拟缩进的情况。
对于设置”段落 -- 缩进和间距 -- 特殊格式 -- 首行缩进“的情况,可以使用下面的脚本得到缩进距离:
  1. Application.ActivePresentation.Slides(1).Shapes(1).TextFrame2.TextRange.Paragraphs(1).ParagraphFormat.FirstLineIndent
复制代码


多谢楼上的同学了,交流才有启发。

TA的精华主题

TA的得分主题

发表于 2016-11-22 17:11 | 显示全部楼层
本帖最后由 wangyihong99 于 2016-11-22 17:12 编辑
小鸟向前飞 发表于 2016-8-3 17:27
自问自答一下,应该叫首行缩进,不是段首缩进,楼上的办法可以处理使用空格模拟缩进的情况。
对于设置”段 ...

请教一下,比如这段 Application.ActivePresentation.Slides(1)   问题是:如何用msgbox 跳出当前是第几个放映灯???比如如上那段是人为的指第1个   ,谢谢!急用!再比如说 .slides.counts是指当前总共有多少个放映灯片,那当前第几个是怎么样表达呢?

TA的精华主题

TA的得分主题

发表于 2017-4-28 18:04 | 显示全部楼层
wangyihong99 发表于 2016-11-22 17:11
请教一下,比如这段 Application.ActivePresentation.Slides(1)   问题是:如何用msgbox 跳出当前是第几 ...

你是说在放映状态下吗?如果是,试试下面代码:
注意:放在标准模块中
Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)
x = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
MsgBox "这是第" & x & "张幻灯片。", vbInformation, Space(18) &"请注意"
End Sub

TA的精华主题

TA的得分主题

发表于 2017-4-28 18:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
小鸟向前飞 发表于 2016-8-3 17:27
自问自答一下,应该叫首行缩进,不是段首缩进,楼上的办法可以处理使用空格模拟缩进的情况。
对于设置”段 ...

这个不行,只在word中有这个属性,ppt中文本框的段落首行缩进,好像没有。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 09:46 , Processed in 0.052099 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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