ExcelHome技术论坛

 找回密码
 免费注册
QQ登录 只需一步,快速开始
   
高效办公必会的Office99uu优优 永久免费,网表让Excel秒变数据库 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! 国内首部Excel函数公式学习大典 职场充电黑科技, Office微99uu优优 免费下载Excel行业应用视频
300集Office 2010微99uu优优 Tableau-数据可视化工具 突破Excel限制,用活字格提高效率 12门Excel免费公开课任你学
你的Excel 201099uu优优学习锦囊 欲罢不能, 过目难忘的 Office 新界面 免费的Excel考勤计算系统
查看: 128|回复: 11
打印 上一主题 下一主题

[求助] 【已解决】谢谢各位老师,关于自动画线有点难度。

[复制链接]
TA的精华主题TA的得分主题
跳转到指定楼层
1
发表于 2018-1-13 13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 anymole 于 2018-1-15 21:58 编辑

PS:已解决难题 ,十分感谢
crazy0qwer 老师的帮助,万忙之中抽出时间帮我解决问题 。。万分感谢。
求助,原工作薄可以把单元格中重复的内容的标记出来。现在需要在此基础上增加自动画线的功能,如图所示。附件中有一个是别的帖子中老师提供的画线的功能,希望能在您帮我解决问题的过程中提供些借鉴。
99999999999.png (303.04 KB, 下载次数: 0)
99999999999.png
3D实用图表0621.zip 364.23 KB, 下载次数: 5
求助.zip 45.86 KB, 下载次数: 8
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 有用有用 无用无用
TA的精华主题TA的得分主题
2
 楼主| 发表于 2018-1-13 16:56 | 只看该作者 |楼主
TA的精华主题TA的得分主题
3
 楼主| 发表于 2018-1-13 20:53 | 只看该作者 |楼主
TA的精华主题TA的得分主题
4
 楼主| 发表于 2018-1-14 10:24 | 只看该作者 |楼主
TA的精华主题TA的得分主题
5
 楼主| 发表于 2018-1-15 09:00 | 只看该作者 |楼主
花了199元买了套书,临时抱佛脚,恶补中,,,,不过我的求助可能自已还是搞不定,老师们有会的帮下我吧。谢谢。
11111111111111.jpg (506.74 KB, 下载次数: 0)
11111111111111.jpg
TA的精华主题TA的得分主题
6
发表于 2018-1-15 11:39 | 只看该作者
anymole 发表于 2018-1-15 09:00
花了199元买了套书,临时抱佛脚,恶补中,,,,不过我的求助可能自已还是搞不定,老师们有会的帮下我吧。 ...

随便选中一个需要划线的单元格再执行,多选也只化所选的第一个单元格。

  • Sub 划线()
  •     Dim Ar, Br(1 To 2, 1 To 2)
  •     Dim I As Long, J As Long, F As Long
  •     Dim S As String
  •     On Error Resume Next
  •     I = Range("D65536").End(xlUp).Row
  •     Ar = Range("A1:CI" & I)
  •     S = Selection.Range("A1").Value
  •     For I = 3 To I
  •         If Not Rows(I).Hidden Then
  •             For J = 4 To UBound(Ar, 2)
  •                 If S = Ar(I, J) Then
  •                     If F = 2 Then
  •                         Br(1, 1) = Cells(I, J).Top + Cells(I, J).Height / 2
  •                         Br(1, 2) = Cells(I, J).Left + Cells(I, J).Width / 2
  •                         ActiveSheet.Shapes.AddConnector(msoConnectorStraight, Br(2, 2), Br(2, 1), Br(1, 2), Br(1, 1)).Line.EndArrowheadStyle = 3
  •                         F = 1
  •                     ElseIf F = 1 Then
  •                         Br(2, 1) = Cells(I, J).Top + Cells(I, J).Height / 2
  •                         Br(2, 2) = Cells(I, J).Left + Cells(I, J).Width / 2
  •                         ActiveSheet.Shapes.AddConnector(msoConnectorStraight, Br(1, 2), Br(1, 1), Br(2, 2), Br(2, 1)).Line.EndArrowheadStyle = 3
  •                         F = 2
  •                     Else
  •                         Br(1, 1) = Cells(I, J).Top + Cells(I, J).Height / 2
  •                         Br(1, 2) = Cells(I, J).Left + Cells(I, J).Width / 2
  •                         F = 1
  •                     End If
  •                 End If
  •             Next
  •         End If
  •     Next
  • End Sub

  • Sub 删除划线()
  •     Dim Sp As Shape
  •     For Each Sp In ActiveSheet.Shapes
  •         If Sp.Type = 1 Then
  •             Sp.Delete
  •         End If
  •     Next
  • End Sub
  • 复制代码
    TA的精华主题TA的得分主题
    7
     楼主| 发表于 2018-1-15 21:55 | 只看该作者 |楼主
    crazy0qwer 发表于 2018-1-15 11:39
    随便选中一个需要划线的单元格再执行,多选也只化所选的第一个单元格。

    老师,爱死你了,你是我心中的大神,,跪谢。。。。。。。。。。。。。。。。。。。。。
    TA的精华主题TA的得分主题
    8
     楼主| 发表于 2018-1-16 09:13 | 只看该作者 |楼主
    crazy0qwer 发表于 2018-1-15 11:39
    随便选中一个需要划线的单元格再执行,多选也只化所选的第一个单元格。

    追问下老师,如果在每个箭头处标记一个数字的话代码修改难吗?要是不太耽误老师时间的话麻烦您帮我完善一下。谢谢了。
    TIM截图20180116091222.jpg (415.5 KB, 下载次数: 0)
    TIM截图20180116091222.jpg
    TA的精华主题TA的得分主题
    9
    发表于 2018-1-16 11:43 | 只看该作者
    anymole 发表于 2018-1-16 09:13
    追问下老师,如果在每个箭头处标记一个数字的话代码修改难吗?要是不太耽误老师时间的话麻烦您帮我完善一 ...

    增加:
    1、画线前删除之前已画的线再重新画。
    2、增加数字序号。

  • Sub 画线()
  •     Dim Ar, Br(1 To 2, 1 To 2)
  •     Dim I As Long, J As Long, F As Long, n As Long
  •     Dim S As String
  •     On Error Resume Next
  •     Call 删除画线
  •     I = Range("D65536").End(xlUp).Row
  •     Ar = Range("A1:CI" & I)
  •     S = Selection.Range("A1").Value
  •     For I = 3 To I
  •         If Not Rows(I).Hidden Then
  •             For J = 4 To UBound(Ar, 2)
  •                 If S = Ar(I, J) Then
  •                     If F = 2 Then
  •                         Br(1, 1) = Cells(I, J).Top + Cells(I, J).Height / 2
  •                         Br(1, 2) = Cells(I, J).Left + Cells(I, J).Width / 2
  •                         ActiveSheet.Shapes.AddConnector(msoConnectorStraight, Br(2, 2), Br(2, 1), Br(1, 2), Br(1, 1)).Line.EndArrowheadStyle = 3
  •                         F = 1
  •                         With ActiveSheet.Shapes.AddLabel(1, Br(1, 2) + Cells(I, J).Height / 2, Cells(I, J).Top, 60, 20)
  •                             .Fill.Visible = 0
  •                             .TextFrame2.TextRange.Text = n
  •                             n = n + 1
  •                             With .TextFrame2.TextRange.Font
  •                                 .Bold = msoTrue
  •                                 .Fill.ForeColor.RGB = RGB(255, 0, 0)
  •                                 .Size = 20
  •                             End With
  •                         End With
  •                     ElseIf F = 1 Then
  •                         Br(2, 1) = Cells(I, J).Top + Cells(I, J).Height / 2
  •                         Br(2, 2) = Cells(I, J).Left + Cells(I, J).Width / 2
  •                         ActiveSheet.Shapes.AddConnector(msoConnectorStraight, Br(1, 2), Br(1, 1), Br(2, 2), Br(2, 1)).Line.EndArrowheadStyle = 3
  •                         F = 2
  •                         With ActiveSheet.Shapes.AddLabel(1, Br(2, 2) + Cells(I, J).Height / 2, Cells(I, J).Top, 60, 20)
  •                             .Fill.Visible = 0
  •                             .TextFrame2.TextRange.Text = n
  •                             n = n + 1
  •                             With .TextFrame2.TextRange.Font
  •                                 .Bold = msoTrue
  •                                 .Fill.ForeColor.RGB = RGB(255, 0, 0)
  •                                 .Size = 20
  •                             End With
  •                         End With
  •                     Else
  •                         Br(1, 1) = Cells(I, J).Top + Cells(I, J).Height / 2
  •                         Br(1, 2) = Cells(I, J).Left + Cells(I, J).Width / 2
  •                         F = 1
  •                         With ActiveSheet.Shapes.AddLabel(1, Br(1, 2) + Cells(I, J).Height / 2, Cells(I, J).Top, 60, 20)
  •                             .Fill.Visible = 0
  •                             .TextFrame2.TextRange.Text = "1"
  •                             n = 2
  •                             With .TextFrame2.TextRange.Font
  •                                 .Bold = msoTrue
  •                                 .Fill.ForeColor.RGB = RGB(255, 0, 0)
  •                                 .Size = 20
  •                             End With
  •                            
  •                         End With
  •                     End If
  •                 End If
  •             Next
  •         End If
  •     Next
  • End Sub

  • Sub 删除画线()
  •     Dim Sp As Shape
  •     For Each Sp In ActiveSheet.Shapes
  •         If Sp.Type = 17 Or Sp.Type = 1 Then
  •             Sp.Select
  •             Sp.Delete
  •         End If
  •     Next
  • End Sub
  • 复制代码
    TA的精华主题TA的得分主题
    10
    发表于 2018-1-16 11:48 | 只看该作者
    anymole 发表于 2018-1-16 09:13
    追问下老师,如果在每个箭头处标记一个数字的话代码修改难吗?要是不太耽误老师时间的话麻烦您帮我完善一 ...

    另外,在 Worksheet_SelectionChange 事件中增加一句
  • Call 画线
  • 复制代码

    可以在你选择单元格时自动画线。

    您需要登录后才可以回帖 登录 | 免费注册
    本版积分规则
    关闭

    最新热点上一条 /1 下一条

    关注官方微信,每天坐享新鲜教程
    手机版|关于我们|联系我们|ExcelHome    GMT+8, 2018-1-18 11:49 , Processed in 2.154967 second(s), 24 queries , Gzip On.
    Powered by Discuz! X3.3 © 2001-2017 Wooffice Inc.
        沪公网安备 31011702000001号 沪ICP备11019229号 本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师
    快速回复 返回顶部 返回列表
    99uu优优