yisuo46 发表于 2017-2-6 22:36:03

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

PPT中段落可以用标尺调整,也可以直接多空几个空格表示段首。想知道用VBA怎么获取段首空了多少空格或距离?
求教了。

job-hyh 发表于 2017-2-7 00:07:47

看看还能在哪里查到!写了多少天,一直未发表。

[*]Private Sub CommandButton1_Click() '段落中段首空了多少空格
[*]Dim str1 As String
[*]Set shp = ActiveWindow.Selection.ShapeRange
[*]str1 = Len(shp.TextFrame.TextRange.Characters)
[*]str2 = Len(LTrim(shp.TextFrame.TextRange.Characters))
[*]MsgBox str1 - str2End Sub

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

zrm860 发表于 2017-2-7 01:00:48

多谢大神!

aaahts 发表于 2017-2-7 01:13:45

学习了学习了学习了

niaoluo 发表于 2017-2-7 02:02:15

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

bhm008 发表于 2017-2-7 02:03:04

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

[*]Sub 段首缩进2字符()
[*]With Selection.ParagraphFormat
[*]    Selection.ParagraphFormat.CharacterUnitFirstLineIndent = 2'设置段首缩进2字符
[*]End With
[*]End Sub
[*]
[*]Sub 首行缩进2字符()
[*]'WORD文档中的第三段落实现首行缩进2字符
[*]Dim MyParagraph As Range
[*]Set MyParagraph = ActiveDocument.Range(ActiveDocument.Paragraphs(3).Range.Start, ActiveDocument.Paragraphs(3).Range.End)
[*]If (MyParagraph.ParagraphFormat.CharacterUnitFirstLineIndent = 2) Then
[*]    MsgBox "首行已经缩进"
[*]Else
[*]    MsgBox "首行未缩进"
[*]MyParagraph.ParagraphFormat.CharacterUnitFirstLineIndent = 2
[*]End IfEnd 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 '中文
不好意思,我最近较忙,给你两个程序,你自己修改,或模仿,最主要是判断

[*]Sub 文本框首个字符判断() '
[*]    Set shp = ActiveWindow.Selection.ShapeRange(1) '选择的文本框
[*]    str1 = Len(shp.TextFrame.TextRange.Characters) '字符串长度
[*]    str2 = Len(LTrim(shp.TextFrame.TextRange.Characters)) '字符串去掉空格后的长度
[*]    str3 = shp.TextFrame.TextRange.Characters '
[*]   
[*]    If Asc(Left(str3, 1)) < 0 Then '中文
[*]      MsgBox &quot;第1个字符是中文&quot;
[*]    End If
[*]   
[*]    If IsNumeric(Left(str3, 1)) = True Then '数字
[*]      MsgBox &quot;第1个字符是数字&quot;
[*]    End If
[*]   
[*]    If Asc(Left(str3, 1)) >= 65 And Asc(Left(str3, 1)) <= 122 Then '英文
[*]      MsgBox &quot;第1个字符是英文&quot;
[*]    End If
[*]   
[*]    If LTrim(Left(str3, 1)) > 0 And LTrim(Left(str3, 1)) < 64 Then
[*]      MsgBox &quot;第1个字符是空格&quot;
[*]      MsgBox &quot;共有&quot; & str1 - str2 & &quot;个空格&quot;
[*]    End IfEnd Sub

复制代码

[*]Sub 段首缩进()
[*]    Set shp = ActiveWindow.Selection.ShapeRange(1) '选择的文本框
[*]    str1 = Len(shp.TextFrame.TextRange.Characters) '字符串长度
[*]    str2 = Len(LTrim(shp.TextFrame.TextRange.Characters)) '字符串去掉空格后的长度
[*]    str3 = shp.TextFrame.TextRange.Characters '
[*]   
[*]    If str1 - str2 = 0 Then '判断段首是否有空格
[*]      With shp.TextFrame.TextRange
[*]      str4 = shp.TextFrame.TextRange.Characters(Start:=1, Length:=0) '光标放在字符串第1个字符前
[*]            .Text = &quot;&quot; & str3 '段首添加2个空格
[*]      End With
[*]    End If
[*]   End Sub

复制代码
不知道能否帮到你,到此为止吧

gibbonlau 发表于 2017-2-7 02:51:20

自问自答一下,应该叫首行缩进,不是段首缩进,楼上的办法可以处理使用空格模拟缩进的情况。
对于设置”段落 -- 缩进和间距 -- 特殊格式 -- 首行缩进“的情况,可以使用下面的脚本得到缩进距离:
Application.ActivePresentation.Slides(1).Shapes(1).TextFrame2.TextRange.Paragraphs(1).ParagraphFormat.FirstLineIndent

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

fisher325 发表于 2017-2-7 02:53:59

请教一下,比如这段 Application.ActivePresentation.Slides(1)   问题是:如何用msgbox 跳出当前是第几个放映灯???比如如上那段是人为的指第1个   ,谢谢!急用!再比如说 .slides.counts是指当前总共有多少个放映灯片,那当前第几个是怎么样表达呢?
页: [1]
查看完整版本: 如何用VBA导出PPT段落中段首空了多少距离?