ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] word中如何用VBA将插入到表格中的图片进行旋转?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-23 11:18 | 显示全部楼层 |阅读模式
由于是插入到表格中的照片,采用的是InlineShapes,该如何让它进行旋转90°的命令?

Sub 固定()

Dim n '图片个数

Dim a, b

On Error Resume Next '忽略错误

For n = 1 To ActiveDocument.InlineShapes.Count 'InlineShapes 类型 图片

a = ActiveDocument.InlineShapes(n).Height

b = ActiveDocument.InlineShapes(n).Width

If a > b Then

ActiveDocument.InlineShapes(n).Height = 11 * 28.35 '设置图片高度(1cm等于28.35px)

Else

'这里需要将图片进行旋转后再调整宽度为11cm


ActiveDocument.InlineShapes(n).Width = 11 * 28.35 '设置图片宽度

End If

Next n

End Sub

TA的精华主题

TA的得分主题

发表于 2018-8-23 11:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有人做过,找找应该能找到。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-23 12:45 | 显示全部楼层
ming0018 发表于 2018-8-23 11:56
有人做过,找找应该能找到。

也找过,但是都是shape,搬过来也没法用

TA的精华主题

TA的得分主题

发表于 2018-8-23 16:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先转为shape,旋转后再转回InlineShapes。

TA的精华主题

TA的得分主题

发表于 2018-8-23 17:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
前段时间写的一个成品:
  1. Sub 图像旋转任意角度()
  2. On Error Resume Next
  3.     Static s As Integer, rg As Range
  4.     Set rg = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range) '经典选择语句!!!
  5.     If Selection.Type = wdSelectionIP Then If MsgBox("程序将处理文中所有图片,是否继续?", vbYesNo) = vbNo Then Exit Sub
  6.     s = InputBox("请输入要旋转的角度:", "图像旋转", s)
  7.     For n = 1 To rg.InlineShapes.Count '还可使用count to 1 step-1和for each
  8.         With rg.InlineShapes(n).ConvertToShape
  9.             .Rotation = s
  10.             s = .Rotation
  11.             .ConvertToInlineShape
  12.         End With
  13.     Next
  14.     For n = 1 To rg.ShapeRange.Count
  15.         rg.ShapeRange.LockAspectRatio = msoTrue
  16.         rg.ShapeRange(n).Rotation = s
  17.         s = rg.ShapeRange(n).Rotation
  18.     Next
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-26 19:24 | 显示全部楼层
4L说的是正确的,后来自己想了下,最终代码如下,虽然shape转inlineshape部分代码有点混乱,但的确这样才能满足我的需求:
  1. Sub 图片处理()

  2. Dim oShape As Variant '定义为变体

  3. Dim a, b, i, k

  4. On Error Resume Next '忽略错误

  5. '**********************将InlineShape转换为shape*****************************
  6.     For Each oShape In ActiveDocument.InlineShapes
  7.    
  8.     oShape.Select
  9.    
  10.     Set oShape = oShape.ConvertToShape
  11.    
  12.     oShape.WrapFormat.AllowOverlap = False '禁止重叠
  13.    
  14.     Next
  15.    
  16. '***********************判断图片是否需要处理********************************
  17.     For i = 1 To ActiveDocument.Shapes.Count

  18.     ActiveDocument.Shapes(i).Select
  19.    
  20.     a = ActiveDocument.Shapes(i).Height

  21.     b = ActiveDocument.Shapes(i).Width
  22.    
  23.       If a > b Then                                 '如果图片是长大于宽的竖立放置状态
  24.         
  25.         If ActiveDocument.Shapes(i).Rotation = 0 Then '且图片未经过旋转处理(防止二次更改后重复旋转命令)
  26.       
  27.         ActiveDocument.Shapes(i).Height = 11 * 28.35  '那么把图片的高度设置为11厘米
  28.         
  29.         Else                                          '如果不是竖立放置(图片已经旋转过了成水平放置了)
  30.         
  31.         ActiveDocument.Shapes(i).IncrementRotation 90 '那么把图片顺时针旋转90°
  32.         
  33.         ActiveDocument.Shapes(i).Height = 11 * 28.35  '同时把图片高度设置为11厘米
  34.         
  35.         End If                                        '结束图片是长大于宽这种假设
  36.         
  37.         Else                                          '如果图片是款大于长的水平放置状态
  38.         
  39.         If ActiveDocument.Shapes(i).Rotation = 0 Then '且图片未经过旋转处理(防止二次更改后重复旋转命令)
  40.    
  41.         ActiveDocument.Shapes(i).IncrementRotation -90 '那么把图片逆时针旋转90°
  42.                
  43.         ActiveDocument.Shapes(i).Width = 11 * 28.35   '同时把图片宽度设置为11厘米
  44.         
  45.         Else                                          '如果不是水平放置(图片已经旋转过了成竖立放置了)
  46.         
  47.         ActiveDocument.Shapes(i).Width = 11 * 28.35   '那么把图片宽度设置为11厘米
  48.               
  49.         End If                                        '结束图片是宽度大于长度这种假设
  50.         
  51.       End If
  52.    
  53.    Next
  54.    
  55. '**********************将图片重新转换为InlineShape(嵌入式)**************************

  56. For k = 1 To ActiveDocument.Shapes.Count

  57. For Each oShape In ActiveDocument.Shapes

  58. oShape.Select

  59. oShape.ConvertToInlineShape

  60. Next oShape

  61. ActiveDocument.Shapes(k).Select

  62. ActiveDocument.Shapes(k).ConvertToInlineShape

  63. oShape.WrapFormat.AllowOverlap = False '禁止重叠

  64. ActiveDocument.Shapes(k).WrapFormat.AllowOverlap = False

  65. Next k


  66. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-2 03:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习下  谢谢分享  图片方面的处理太繁琐了 有了这个代码方便了很多  谢谢了

TA的精华主题

TA的得分主题

发表于 2020-1-3 17:15 | 显示全部楼层
eject2010 发表于 2018-8-26 19:24
4L说的是正确的,后来自己想了下,最终代码如下,虽然shape转inlineshape部分代码有点混乱,但的确这样才能 ...

这一版必须得收藏,用的地方可多了,感谢分享
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 14:44 , Processed in 0.036920 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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