Excel精英培训网

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

[已解决]求助一个画线的代码

[复制链接]
发表于 2014-5-16 15:53 | 显示全部楼层 |阅读模式
附件里有说明,请老师给解决一个画线的代码,谢谢!
Book1.zip (11.98 KB, 下载次数: 24)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-5-16 16:29 | 显示全部楼层
  1. Sub demo()
  2.     Dim i&, j&
  3.     Dim rg1L&, rg1T&, rg2T&, rg2L&
  4.     Dim rgTop As Range, rgDown As Range
  5.     On Error Resume Next
  6.     ActiveSheet.DrawingObjects.Delete
  7.     For i = 3 To Cells(Rows.Count, "j").End(xlUp).Row - 1
  8.         Set rgTop = Cells(i, "o").Offset(, Cells(i, "j").Value)
  9.         Set rgDown = Cells(i + 1, "o").Offset(, Cells(i + 1, "j").Value)
  10.         rg1L = rgTop.Left
  11.         rg1T = rgTop.Top
  12.         rg2L = rgDown.Left
  13.         rg2T = rgDown.Top
  14.         ActiveSheet.Shapes.AddConnector msoConnectorStraight, rg1L, rg1T, rg2L, rg2T
  15.     Next

  16.     With ActiveSheet.DrawingObjects
  17.         With .ShapeRange.Line
  18.             .Visible = msoTrue
  19.             .ForeColor.RGB = RGB(255, 0, 0)
  20.         End With
  21.     End With
  22. End Sub
复制代码
回复

使用道具 举报

发表于 2014-5-16 16:31 | 显示全部楼层
  1. Sub demo()
  2.     Dim i&, j&
  3.     Dim rg1L&, rg1T&, rg2T&, rg2L&
  4.     Dim rgTop As Range, rgDown As Range
  5.     On Error Resume Next
  6.     Application.ScreenUpdating = False
  7.     '清空原有线条
  8.     ActiveSheet.DrawingObjects.Delete
  9.     '生成连接线
  10.     '单元格的左下角与下一个单元格的左上角连线
  11.     For i = 3 To Cells(Rows.Count, "j").End(xlUp).Row - 1
  12.         Set rgTop = Cells(i, "o").Offset(, Cells(i, "j").Value)
  13.         Set rgDown = Cells(i + 1, "o").Offset(, Cells(i + 1, "j").Value)
  14.         rg1L = rgTop.Left
  15.         rg1T = rgTop.Top
  16.         rg2L = rgDown.Left
  17.         rg2T = rgDown.Top
  18.         ActiveSheet.Shapes.AddConnector msoConnectorStraight, rg1L, rg1T, rg2L, rg2T
  19.     Next
  20.     '设置连接线颜色:红色
  21.     With ActiveSheet.DrawingObjects
  22.         With .ShapeRange.Line
  23.             .Visible = msoTrue
  24.             .ForeColor.RGB = RGB(255, 0, 0)
  25.         End With
  26.     End With
  27.     Application.ScreenUpdating = True
  28.     MsgBox "画线完成"
  29. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-5-16 16:41 | 显示全部楼层
可画完线怎么是这个样子呢,怎么修改老师

QQ截图20140516163957.png
回复

使用道具 举报

发表于 2014-5-16 17:00 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim w(1 To 20000), rng1 As Range, rng2 As Range
  3. For Each m In ActiveSheet.Shapes
  4.     If m.Type <> 8 Then m.Delete
  5. Next
  6. For Each m In [o3:x152].SpecialCells(xlCellTypeConstants, 2)
  7.     s = s + 1: w(s) = m.Address
  8. Next
  9. For i = 2 To s
  10.     Set rng1 = Range(w(i - 1))
  11.     Set rng2 = Range(w(i))
  12.     x1 = rng1.Left + rng1.Width / 2
  13.     y1 = rng1.Top + rng1.Height / 2
  14.     x2 = rng2.Left + rng2.Width / 2
  15.     y2 = rng2.Top + rng2.Height / 2
  16.     ActiveSheet.Shapes.AddLine(x1, y1, x2, y2).Select
  17. Next
  18. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
dfzc + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-5-16 17:01 | 显示全部楼层
………………

Book1.zip

23.02 KB, 下载次数: 16

回复

使用道具 举报

发表于 2014-5-16 17:38 | 显示全部楼层
QQ截图20140516173146.jpg
不知道楼主怎么用的,我这是正常的。
另外,如果按5楼的中心位置画线可能更好看。
回复

使用道具 举报

 楼主| 发表于 2014-5-16 17:54 | 显示全部楼层
谢谢,就这样了,很好!
回复

使用道具 举报

发表于 2017-8-11 19:54 | 显示全部楼层
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 20:57 , Processed in 0.205523 second(s), 20 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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