Excel精英培训网

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

[已解决]这段VBA代码错在那里?

[复制链接]
发表于 2013-5-9 11:04 | 显示全部楼层 |阅读模式
这段VBA代码错在那里?格式角度度分秒转为十进制的VBA:
  1. Public Function转换成十进制(x As Double) As Double'度分秒转换成十进制
  2. On Error Resume Next
  3. Dim A1 As Double
  4. Dim A2 As Single
  5. Dim A3 As Single
  6. Dim A4 As Double
  7. Dim A5 As Double
  8. Dim A6 As Double
  9. A6 = Abs(x)
  10. A1 = Int(A6)
  11. A2 = (A6 - A1) * 100
  12. A2 = Int(A2 )
  13. A3 = (A6 - A1) * 10000 - 100 * A2
  14. A4 = A2 + A3 / 60
  15. A5 = A1 + A4 / 60
  16. If x = ""  Then
  17. 转换成十进制= ""
  18. ElseIf x>=0 Then
  19. 转换成十进制= A5
  20. Else
  21. 转换成十进制= - A5
  22. End If
  23. End Function
复制代码
角度十进制与六十进制互换与VBA-1.rar (7.56 KB, 下载次数: 7)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-9 11:19 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-5-9 11:20 编辑
  1. Public Function 转换成十进制(x As Double) As Double    '度分秒转换成十进制
  2.     On Error Resume Next
  3.     Dim A1 As Double
  4.     Dim A2 As Single
  5.     Dim A3 As Single
  6.     Dim A4 As Double
  7.     Dim A5 As Double
  8.     Dim A6 As Double
  9.     A6 = Abs(x)
  10.     A1 = Int(A6)
  11.     A2 = (A6 - A1) * 100
  12.     A2 = Int(A2)
  13.     A3 = (A6 - A1) * 10000 - 100 * A2
  14.     A4 = A2 + A3 / 60
  15.     A5 = A1 + A4 / 60
  16.    
  17.     If x = "" Then
  18.         转换成十进制 = ""
  19.     End If
  20.     转换成十进制 = A5

  21.     If x < 0 Then
  22.         转换成十进制 = 转换成十进制 * -1
  23.     End If
  24. End Function
复制代码

评分

参与人数 1 +2 收起 理由
YANG6815475 + 2 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-5-9 20:59 | 显示全部楼层
hwc2ycy 发表于 2013-5-9 11:19

   您的代码输入后,凡是有角度的均能正确换算成十进位的角度了,谢谢!
   这里有两个问题请教:
  ⑴我的代码不知错在什么地方?!请说出原因,
  ⑵在第4个单元格没有角度,但显示为“0”度,代码仍然存在问题的,问题在哪里?



回复

使用道具 举报

 楼主| 发表于 2013-5-9 21:03 | 显示全部楼层
hwc2ycy 发表于 2013-5-9 11:19

存在问题

存在问题
补充上面⑵问题
回复

使用道具 举报

发表于 2013-5-9 22:07 | 显示全部楼层
你F8就会找到问题了,在A6处下断点,一步一步分析吧。
回复

使用道具 举报

发表于 2013-5-9 22:09 | 显示全部楼层
其实0度可以直接过滤,不需要参与运算的。
不过返回值还会是0,为什么呢,因为你这是函数,定义的是双精度吧,默认返回值就是0,除非你有计算出结果。
回复

使用道具 举报

 楼主| 发表于 2013-5-10 10:02 | 显示全部楼层
hwc2ycy 发表于 2013-5-9 22:09
其实0度可以直接过滤,不需要参与运算的。
不过返回值还会是0,为什么呢,因为你这是函数,定义的是双精度 ...

    谢谢您的回答,按照程序的要求,单元格空白处,角度计算不能等于0度的,在工程上是不行的。在代码中中有:
         If x = "" Then
        转换成十进制 = "",

   应该显示无值的,为什么显示为零呢?
   另,我检查了代码,没有错误之处?!能否直接指出。
   用公式表示上面单元格空白计算显示问题,修改如下:
  =IF(A4="","",(SIGN(A4)*(INT(ABS(A4))+INT(100*MOD(ABS(A4),1))/60+MOD(ABS(A4)*100,1)/36)))


回复

使用道具 举报

发表于 2013-5-10 10:03 | 显示全部楼层
你把函数的返回类型去掉。
回复

使用道具 举报

发表于 2013-5-10 10:04 | 显示全部楼层
代码开始先对X进行判断,如果是0,就直接返回空值。
回复

使用道具 举报

发表于 2013-5-10 10:08 | 显示全部楼层
  1. Public Function 转换成十进制(x As Double)    ' As Double '度分秒转换成十进制
  2.     On Error Resume Next
  3.     Dim A1 As Double
  4.     Dim A2 As Single
  5.     Dim A3 As Single
  6.     Dim A4 As Double
  7.     Dim A5 As Double
  8.     Dim A6 As Double
  9.     If x = 0 Then
  10.         转换成十进制 = ""
  11.         Exit Function
  12.     End If
  13.     A6 = Abs(x)
  14.     A1 = Int(A6)
  15.     A2 = (A6 - A1) * 100
  16.     A2 = Int(A2)
  17.     A3 = (A6 - A1) * 10000 - 100 * A2
  18.     A4 = A2 + A3 / 60
  19.     A5 = A1 + A4 / 60
  20.     If x > 0 Then
  21.         转换成十进制 = A5
  22.     Else
  23.         转换成十进制 = -A5
  24.     End If
  25. End Function
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 00:59 , Processed in 1.095964 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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