ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助:同样的代码,为何不起作用?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-1-5 21:52 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 bylandi 于 2025-1-6 08:34 编辑

个人把“首行缩进”及“取消首行缩进”代码拼合在一起,是可以轮流执行的。
可是,为何图片、表格宽度设置代码却不能轮流执行?

录制_2025_01_05_21_39_48_912.gif

  1. Sub 段落—首行缩进()
  2.     ' 首行缩进/取消缩进(Alt+S)
  3.     Dim para As Paragraph
  4.     For Each para In Selection.Paragraphs
  5.         If para.Format.CharacterUnitFirstLineIndent = 0 Then
  6.             para.Format.CharacterUnitFirstLineIndent = 2
  7.         Else
  8.             para.Format.CharacterUnitFirstLineIndent = 0
  9.             para.Format.FirstLineIndent = CentimetersToPoints(0)
  10.         End If
  11.     Next para
  12. End Sub
复制代码
以上代码可以执行,可是,以下2个,却不行。

  1. Sub 图片—设置宽度()
  2.     '设置图片宽度/高度(Alt+Q)
  3. Dim iShape As InlineShape
  4.     For Each iShape In Selection.InlineShapes
  5.         If iShape.Width <> CentimetersToPoints(15.5) Then
  6.         iShape.Width = CentimetersToPoints(15.5) '宽度(CM)
  7.         Else
  8.         iShape.Height = CentimetersToPoints(15.5) '高度(CM)
  9.         End If
  10.         Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter ' 设置水平居中
  11.     Next iShape
  12. End Sub

复制代码


  1. Sub 表格—设置表格宽度()
  2.     '
  3.     ' 表格宽度15CM/100%(Alt+T)
  4.     '
  5.     Dim WinTable As Table, i As Long
  6.     If Selection.Information(wdWithInTable) = True Then i = 1
  7.     For Each WinTable In ActiveDocument.Tables
  8.         If i = 1 Then Set WinTable = Selection.Tables(1)
  9.         With WinTable
  10.             if .PreferredWidth <> CentimetersToPoints(15) then
  11.                .PreferredWidth = CentimetersToPoints(15)
  12.             Else
  13.             .AutoFitBehavior (wdAutoFitWindow)
  14.             End if
  15.         End With
  16.         If i = 1 Then Exit For
  17.     Next
  18.     Application.ScreenUpdating = True
  19. End Sub
复制代码



TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-6 08:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
还有个问题。
我想在表格批处理前,弹出一个MsgBox,提示全文执行会比较慢,是否要执行。
该怎么写呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-9 18:52 | 显示全部楼层
目前,图片大小、MsgBox提示,已经弄得了。
但是,表格宽度还是没有完成,还是只能用2段代码。

有没有大侠能帮看看,表格这个,如何解决呢?
录制_2025_01_09_10_31_54_218.gif
录制_2025_01_09_10_46_21_818.gif

TA的精华主题

TA的得分主题

发表于 2025-1-10 11:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 batmanbbs 于 2025-1-10 11:08 编辑

需要判断并设置PreferredWidthType属性,然后再设置宽度。另外,判断上面有点小问题,如果页面宽度小于等于15厘米,运行没有效果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-10 14:51 | 显示全部楼层
感谢您的回复。
我现在就是想要实现2个宽度的轮流设置,第1个次运行,是一个宽度值,第2次运行,是另一个宽度值。
这样的话,我就可以只用1个快捷键,而不用设置2个。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-10 15:01 | 显示全部楼层
本帖最后由 bylandi 于 2025-1-10 19:43 编辑


这是目前设置的代码,使用了Rotation判断角度,如果是横向的图片,则设置宽度,如果非横向的,则设置高度。

有个问题就是,不懂这个Rotation为何不能获取嵌入属性的图片,只能获取环绕型图片的。
所以,就先把图片设置成了环绕,然后再设置回来,所以执行效率不够快。

您帮看看,有否可以有优化的地方?



  1. Sub 图片—大小()
  2.     '快捷键:Alt+Q
  3.     On Error Resume Next  '忽略错误
  4.     Selection.ShapeRange.WrapFormat.Type = wdWrapTight  '设置为环绕型属性
  5.         If Selection.ShapeRange.Rotation = 0 Then
  6.             Selection.ShapeRange.Width = CentimetersToPoints(15.2)  '宽度(CM)
  7.         Else
  8.             Selection.ShapeRange.Height = CentimetersToPoints(15.2)  '高度(CM)
  9.         End If
  10.     Selection.ShapeRange.WrapFormat.Type = wdWrapInline  '恢复嵌入型属性
  11.     Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter  ' 设置居中对齐
复制代码




TA的精华主题

TA的得分主题

发表于 2025-1-10 19:54 | 显示全部楼层
bylandi 发表于 2025-1-10 14:51
感谢您的回复。
我现在就是想要实现2个宽度的轮流设置,第1个次运行,是一个宽度值,第2次运行,是另一个 ...

咳,说啥好呢,没认真看回复

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-10 20:06 | 显示全部楼层
我不是专业的,不熟代码,上面那些都是自己查阅资料 拼凑出来的。

TA的精华主题

TA的得分主题

发表于 2025-1-11 12:35 | 显示全部楼层
bylandi 发表于 2025-1-10 15:01
这是目前设置的代码,使用了Rotation判断角度,如果是横向的图片,则设置宽度,如果非横向的,则设置高度 ...

没有办法,微软就这样定的,Rotation只支持浮动图片。
不过也没有必要一个一个设置,可以将嵌入型图片转成浮动图片,判断是否旋转后,恢复为嵌入型图片,再设置高或者宽,这样可以直接批量处理嵌入型图片。

PS:我估计论坛上99%都不是程序员,Word板块更是如此。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-11 12:58 | 显示全部楼层
图片设置我每次只要设置一张,所以,目前图片设置的代码没有优化的条件,就不理了。
现在就是表格的问题,您能帮我一下嘛?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 12:07 , Processed in 0.026666 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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