ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 输入数字时间,表盘时针和分针自动指向相应位置,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-3 11:39 | 显示全部楼层 |阅读模式
输入数字时间,表盘时针和分针自动指向相应位置,谢谢!

时钟.zip

36.79 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2022-12-3 13:08 | 显示全部楼层
坐等高手来,好学习,方向好弄,位置不会,不是上就是下,不是左就是右。估计要用到三角函数来计算了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-3 13:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-12-3 14:55 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-12-3 15:02 来自手机 | 显示全部楼层
shapes.AddLine (BeginX, BeginY, EndX, EndY)用座标画直线,三角函数算下角度。
估计应该有人做过,可以百度下。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-4 17:24 | 显示全部楼层
  1. Sub 删除表针()
  2.     With Sheet1
  3.         A = .Shapes.Count
  4.         基图名称 = .Shapes(1).Name
  5.         For Each 图形 In .Shapes
  6.             If 图形.Name <> 基图名称 Then
  7.                 图形.Delete
  8.             End If
  9.         Next 图形
  10.     End With
  11. End Sub

  12. Sub 时钟变动()
  13.     With Sheet1
  14.         时针长度 = [D18]
  15.         时针线宽 = [D19]
  16.         分针长度 = [D20]
  17.         分针线宽 = [D21]
  18.         时间 = Sheet1.[E15]
  19.         A = .Shapes.Count
  20.         With .Shapes(1)
  21.             基左坐标 = .Left  '左坐标
  22.             基上坐标 = .Top  '上坐标
  23.             基图形高 = .Height  '高
  24.             基图形宽 = .Width  '宽
  25.             中心左坐标 = 基左坐标 + 基图形宽 / 2
  26.             中心上坐标 = 基上坐标 + 基图形高 / 2
  27.         End With
  28.         分针参数 = 获取分针参数(时间)
  29.         时针参数 = 获取时针参数(时间)
  30.         'Set 分针 = .Shapes.AddLine(起点左坐标, 起点上坐标, 终点左坐标, 终点上坐标)
  31.         Set 时针 = .Shapes.AddLine(中心左坐标, 中心上坐标, 中心左坐标 + 时针参数(1), 中心上坐标 + 时针参数(2))
  32.         With 时针.Line
  33.             .ForeColor.RGB = 125
  34.             .Weight = 时针线宽  '线宽
  35.             .EndArrowheadStyle = msoArrowheadTriangle
  36.         End With
  37.         Set 分针 = .Shapes.AddLine(中心左坐标, 中心上坐标, 中心左坐标 + 分针参数(1), 中心上坐标 + 分针参数(2))
  38.         With 分针.Line
  39.             .ForeColor.RGB = 0
  40.             .Weight = 分针线宽  '线宽
  41.             .EndArrowheadStyle = msoArrowheadTriangle
  42.         End With
  43.     End With
  44. End Sub

  45. Public Function 获取时针参数(时间)
  46.     Dim ARR(1 To 2)
  47.     时针长度 = Sheet1.[D18]
  48.     分钟 = Minute(时间)
  49.     时钟 = Hour(时间)
  50.     If 时钟 = 12 Then 时钟 = 0
  51.     If 时钟 > 12 Then 时钟 = 时钟 - 12
  52.     时钟 = 时钟 + 分钟 / 60
  53.     角度 = 时钟 * 360 / 12
  54.     If 角度 = 0 Then
  55.         ARR(1) = 0
  56.         ARR(2) = -时针长度
  57.     End If
  58.     If 角度 = 90 Then
  59.         ARR(1) = 时针长度
  60.         ARR(2) = 0
  61.     End If
  62.     If 角度 = 180 Then
  63.         ARR(1) = 0
  64.         ARR(2) = 时针长度
  65.     End If
  66.     If 角度 = 270 Then
  67.         ARR(1) = -时针长度
  68.         ARR(2) = 0
  69.     End If
  70.     If 角度 > 0 And 角度 < 90 Then
  71.         角A = 角度
  72.         角B = 180 - 90 - 角A
  73.         角C = 90
  74.         C = 时针长度
  75.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  76.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  77.         ARR(1) = A
  78.         ARR(2) = -B
  79.     End If
  80.     If 角度 > 90 And 角度 < 180 Then
  81.         角A = 180 - 角度
  82.         角B = 180 - 90 - 角A
  83.         角C = 90
  84.         C = 时针长度
  85.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  86.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  87.         ARR(1) = A
  88.         ARR(2) = B
  89.     End If
  90.     If 角度 > 180 And 角度 < 270 Then
  91.         角A = 角度 - 180
  92.         角B = 180 - 90 - 角A
  93.         角C = 90
  94.         C = 时针长度
  95.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  96.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  97.         ARR(1) = -A
  98.         ARR(2) = B
  99.     End If
  100.     If 角度 > 270 And 角度 < 360 Then
  101.         角A = 90 - (角度 - 270)
  102.         角B = 180 - 90 - 角A
  103.         角C = 90
  104.         C = 时针长度
  105.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  106.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  107.         ARR(1) = -A
  108.         ARR(2) = -B
  109.     End If
  110.     获取时针参数 = ARR
  111. End Function

  112. Public Function 获取分针参数(时间)
  113.     Dim ARR(1 To 2)
  114.     分针长度 = Sheet1.[D20]
  115.     分钟 = Minute(时间)
  116.     角度 = 分钟 * 360 / 60
  117.     If 角度 = 0 Then
  118.         ARR(1) = 0
  119.         ARR(2) = -分针长度
  120.     End If
  121.     If 角度 = 90 Then
  122.         ARR(1) = 分针长度
  123.         ARR(2) = 0
  124.     End If
  125.     If 角度 = 180 Then
  126.         ARR(1) = 0
  127.         ARR(2) = 分针长度
  128.     End If
  129.     If 角度 = 270 Then
  130.         ARR(1) = -分针长度
  131.         ARR(2) = 0
  132.     End If
  133.     If 角度 > 0 And 角度 < 90 Then
  134.         角A = 角度
  135.         角B = 180 - 90 - 角A
  136.         角C = 90
  137.         C = 分针长度
  138.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  139.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  140.         ARR(1) = A
  141.         ARR(2) = -B
  142.     End If
  143.     If 角度 > 90 And 角度 < 180 Then
  144.         角A = 180 - 角度
  145.         角B = 180 - 90 - 角A
  146.         角C = 90
  147.         C = 分针长度
  148.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  149.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  150.         ARR(1) = A
  151.         ARR(2) = B
  152.     End If
  153.     If 角度 > 180 And 角度 < 270 Then
  154.         角A = 角度 - 180
  155.         角B = 180 - 90 - 角A
  156.         角C = 90
  157.         C = 分针长度
  158.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  159.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  160.         ARR(1) = -A
  161.         ARR(2) = B
  162.     End If
  163.     If 角度 > 270 And 角度 < 360 Then
  164.         角A = 90 - (角度 - 270)
  165.         角B = 180 - 90 - 角A
  166.         角C = 90
  167.         C = 分针长度
  168.         B = C / Sin(角C * Application.Pi() / 180) * Sin(角B * Application.Pi() / 180)
  169.         A = C / Sin(角C * Application.Pi() / 180) * Sin(角A * Application.Pi() / 180)
  170.         ARR(1) = -A
  171.         ARR(2) = -B
  172.     End If
  173.     获取分针参数 = ARR
  174. End Function



  175. Private Sub Worksheet_Change(ByVal Target As Range)
  176.     单元格名称 = Target.Address(0, 0)
  177.     If 单元格名称 = "E15" Then
  178.         Call Sheet1.删除表针
  179.         Call Sheet1.时钟变动
  180.     End If
  181. End Sub


复制代码

试试,代码比较繁琐,用的是画线的笨办法

时钟20221201.rar

49.53 KB, 下载次数: 19

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-5 12:12 | 显示全部楼层
本帖最后由 zyhui1961 于 2022-12-5 12:32 编辑
39660519 发表于 2022-12-4 17:24
试试,代码比较繁琐,用的是画线的笨办法

我的天,这也太厉害了!代码太麻烦了,谢谢!

大师再帮忙看一下,能不能更进一步,跪谢!!!

或者你能帮我改(增加)一个,后面的我来照你的样子改(增加),太感谢了!!!

时钟20221205.zip

82.12 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2022-12-5 15:53 | 显示全部楼层
zyhui1961 发表于 2022-12-5 12:12
我的天,这也太厉害了!代码太麻烦了,谢谢!

大师再帮忙看一下,能不能更进一步,跪谢!!!

试试,基础钟表图片要单独出来,不要组合,颜色可以自己添加和修改。

时钟20221205.rar

63.98 KB, 下载次数: 24

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-12 13:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
39660519 发表于 2022-12-5 15:53
试试,基础钟表图片要单独出来,不要组合,颜色可以自己添加和修改。

我下载你的文件,不会操作:我在第二个工作表(1206)在相应单元格输入时间,图片就删除了。
我想这样:你帮我改两一个代码,比如在E14和H14单元格输入时间,上面对应的时钟就会显示正确的时间。
我自己再比照你更改的代码再改剩余的代码,谢谢!

TA的精华主题

TA的得分主题

发表于 2022-12-12 16:50 | 显示全部楼层
zyhui1961 发表于 2022-12-12 13:36
我下载你的文件,不会操作:我在第二个工作表(1206)在相应单元格输入时间,图片就删除了。
我想这样: ...

Sub 生成基础字典()
    Set 对应字典 = CreateObject("ScrIptIng.DIctIonary")
    Set 基图名称字典 = CreateObject("ScrIptIng.DIctIonary")
    ARR1 = Array("图片 2", "图片 3", "图片 4", "图片 5", "图片 6", "图片 7", "图片 8", "图片 9", "图片 10", "图片 11", "图片 12", "图片 13")
    ARR2 = Array("E14", "H14", "K14", "E29", "H29", "K29", "E44", "H44", "K44", "E59", "H59", "K59")
    A = -1
    For Each B In ARR2
        A = A + 1
        对应字典(B) = ARR1(A)
        基图名称字典(ARR1(A)) = 1
    Next B
    Set 颜色字典 = CreateObject("ScrIptIng.DIctIonary")
    颜色字典("黑") = 0
    颜色字典("红") = 255
    颜色字典("绿") = 56320
    颜色字典("蓝") = 16711680
    颜色字典("黄") = 64507
    Set 针长宽字典 = CreateObject("ScrIptIng.DIctIonary")
    针长宽字典("时针长度") = 35
    针长宽字典("时针线宽") = 4.5
    针长宽字典("分针长度") = 50
    针长宽字典("分针线宽") = 3
End Sub

红色部分是基础图片的名称,绿色部分是对应时间的单元格,一一对应就行了。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-10 00:07 , Processed in 0.046446 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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