ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]怎样用VBA使不在文字行中的所有嵌入式图片居中?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-8-8 13:48 | 显示全部楼层 |阅读模式

我用下面的代码能使文档中所有的嵌入式图片居中,但我希望它只对独立的图片(前后均无文字,即在图片前和后都只有换行符)起作用,而对行中的图片(在它前、或后、或前后有文字,即该图片处在一个段落中,但它在段落中的位置是任意的)不起作用,对该图片所在的段落也无任何影响(下面的代码会使该段落的最后一行居中)。

这该怎样修改代码?

Sub AAA1()

 Dim myS As InlineShape
    For Each myS In ActiveDocument.InlineShapes
      myS.Range.Paragraphs.Alignment = wdAlignParagraphCenter
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2006-8-8 14:37 | 显示全部楼层

请参考:

Sub AAA1()
    Dim myS As InlineShape
    Application.ScreenUpdating = False
    For Each myS In ActiveDocument.InlineShapes
        If Len(myS.Range.Paragraphs(1).Range.Text) = 2 Then
            myS.Range.Paragraphs.Alignment = wdAlignParagraphCenter
        End If
    Next
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-8 20:40 | 显示全部楼层

谢谢守柔大侠!

我也想到要用If语句和Len函数,但就是不知道后面怎么表达,您的代码中“= 2 ”是何意?

还有:关闭和打开屏幕更新在代码中有何作用?即:

Application.ScreenUpdating = False/True

还有您和孔版主有时在代码的首尾加进:

Debug.Print Timer

这又起什么作用?

能否请您帮我解释一下,就算授我以渔吧。

谢谢!

[此贴子已经被作者于2006-8-8 21:20:51编辑过]

TA的精华主题

TA的得分主题

发表于 2006-8-8 21:25 | 显示全部楼层

我希望您抽空搜索一下本版,我想,里面有足够的答案的。

谢谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-8 21:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

但据我理解:

If Len(myS.Range.Paragraphs(1).Range.Text) = 2 Then

中“ = 2 ”是否应为“ = 3 ”,“ = 2 ”是基于什么?

关闭屏幕更新后程序能运行更快吧。

Debug.Print的作用我在另一网站上查到了。

谢谢!

[此贴子已经被作者于2006-8-8 22:02:53编辑过]

TA的精华主题

TA的得分主题

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

我在老大的提示下的分析。

请细看。

u6KcQn9I.rar (155.82 KB, 下载次数: 54)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-9 16:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢!看过,学到处理表格的不少东西

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-12 16:04 | 显示全部楼层
QUOTE:
以下是引用ssq1109在2006-8-8 21:35:37的发言:

但据我理解:

If Len(myS.Range.Paragraphs(1).Range.Text) = 2 Then

中“ = 2 ”是否应为“ = 3 ”,“ = 2 ”是基于什么?

关闭屏幕更新后程序能运行更快吧。

Debug.Print的作用我在另一网站上查到了。

谢谢!


今天有一偶然发现:

我原将守柔版主帮我改的代码在一WIN 98SE+OFFICE 2000的机器上运行,并不能达到目的,后将

If Len(myS.Range.Paragraphs(1).Range.Text) = 2

改为:

If Len(myS.Range.Paragraphs(1).Range.Text) = 3

能够正确运行,之后较长时间未用此代码,今天又要用它,但是在一WIN 2000+OFFICE 2003上运行,结果不起作用,后我又将“= 3”再改回为“= 2”又可正确运行。

这是为什么?

为了使其有通用性,能否改为:

    Dim myS As InlineShape
    For Each myS In ActiveDocument.InlineShapes
        If Len(myS.Range.Paragraphs(1).Range.Text) = 2 Or _
        Len(myS.Range.Paragraphs(1).Range.Text) = 3 Then
            myS.Range.Paragraphs.Alignment = wdAlignParagraphCenter
        End If
    Next

请高人指点。

TA的精华主题

TA的得分主题

发表于 2006-9-13 06:45 | 显示全部楼层

你可以在不同系统和Office配置时,选中嵌入式图片,在VB编辑器中,运行以下代码:

Sub Example()
    Debug.Print Len(Selection)
End Sub
在Word页代码中,嵌入式图形视为“^1”(数字1)

如果你说的问题确实存在,可能需要加上系统配置或者OFFICE配置的版本识别。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-13 10:07 | 显示全部楼层

谢谢守柔大侠!

我说的问题确实存在,我反复试验过。我在8楼改的代码在2种系统上运行都能得到正确结果,下午准备再找其他不同的系统测试一下。

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

本版积分规则

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

GMT+8, 2024-11-16 22:30 , Processed in 0.046837 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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