Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 937|回复: 1

怎么根据表格中某个单元的值在其位置上添加直线

[复制链接]
发表于 2022-6-13 16:25 | 显示全部楼层 |阅读模式
各位好,我有一个需求,我先大致描述一下吧。

有很多个文档,其中每一个文档中,每一页都是一个表格。我想在表格中 “单位(子单位)”上单位的位置添加一个斜线,同理,如果碰到“分部(子分部)”,也在分部上面添加一个斜线。最终实现的效果在我上传的文档里面。


【由于文档中表的标题可能会在上一页,所以如果添加形状的坐标是固定的话,会偏移,不知道这里能不能获取某个单元格的x,y坐标?】

我试了很久,功能整合是出的问题一直没能解决。首先把功能一个个拆解。1. 先实现了添加斜线的功能。这个我是直接弄的相对位置。2. 判断表格第二行第一列里面的文字是否和预设文字匹配,是则执行画斜线。3. 遍历每一个表格。4. 遍历每一个文档。

下面是画斜线的代码。我当初试的时候,挺正常的,可惜需要将光标点在某一页,才会在这一页上执行。
  1. Sub NewCanvasLine()
  2. Dim shpCanvas As Shape
  3. Dim shpLine As Shape

  4. Set shpCanvas = ActiveDocument.Shapes _
  5. .AddCanvas(Left:=90, Top:=125, _
  6. Width:=150, Height:=150)

  7. 'Add a line to the drawing canvas
  8. Set shpLine = shpCanvas.CanvasItems.AddLine( _
  9. BeginX:=5, BeginY:=5, EndX:=25, EndY:=14)

  10. 'Add an arrow to the line and sets the color to purple
  11. With shpLine.Line
  12. .Weight = 1
  13. .ForeColor.RGB = RGB(Red:=0, Green:=0, Blue:=0)
  14. End With
  15. End Sub
复制代码
下面是整合了遍历所有表格,然后判断才画线的代码。最终的运行效果就是,添加的线都重复画到了第一页,但是数量是对的。
  1. Sub 斜线1()
  2. '
  3. ' 斜线1 宏
  4. '
  5. '
  6. Dim shpCanvas As Shape
  7.     Dim shpLine As Shape
  8.     Dim mystr As String
  9.     Dim mystr1 As String
  10.     Dim oCell As Cell
  11.     Dim cellText As String
  12.     mystr = "单位(子单位"
  13.     mystr1 = "单位(子单位"
  14.     For i = 1 To ActiveDocument.Tables.Count
  15.        Set oCell = ActiveDocument.Tables(i).Cell(2, 1) '选择整个单元格内容
  16.        cellText = Mid(oCell.Range.Text, 1, 6)
  17.        If StrComp(cellText, mystr, 1) = 0 Then
  18.            Set shpCanvas = ActiveDocument.Shapes _
  19.            .AddCanvas(Left:=90, Top:=125, _
  20.            Width:=150, Height:=150)
  21.    
  22.            'Add a line to the drawing canvas
  23.            Set shpLine = shpCanvas.CanvasItems.AddLine( _
  24.            BeginX:=5, BeginY:=5, EndX:=25, EndY:=14)
  25.    
  26.            'Add an arrow to the line and sets the color to purple
  27.            With shpLine.Line
  28.                .Weight = 1
  29.                .ForeColor.RGB = RGB(Red:=0, Green:=0, Blue:=0)
  30.             End With
  31.        End If
  32.     Next i
  33. End Sub
复制代码
整个问题的难点在于:
1. 如何找到文档中某个单元格的位置,这需要用来设置画布的位置,不然后面会有偏差
2. 为什么我上面整合的代码只会在第一页上添加呢?(其实我想过在画布位置的地方加上每一页的偏移量,但是找不到这个数值)

叙述比较多,能看完的兄弟能不能指教一下,谢谢!

指定位置添加斜线.zip

34.33 KB, 下载次数: 1

里面是最终效果

发表于 2022-6-19 06:27 | 显示全部楼层
Active,当前的、激活的、活跃的,当然只在这一页操作了,如果要在指定页操作,就应该换成指定页
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-1 20:35 , Processed in 0.121464 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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