如何解决VBA用户定义的功能显示1/8英寸时显示空白
我是VBA的新手。我写了这个UDF(我的第一个适当的编码),但我搞砸了,但我不知道是什么。我知道的很少,目前正在上一门课程,但是大多数未经教育的眼睛似乎可以互换。
此外,如果有人对减少变量数量或清理代码有任何提示,我将不胜感激。
Function NearestEighth(number) As String
Dim NE As String
WholeNum = Application.WorksheetFunction.RoundDown(number,0)
DecNum = (number) - (WholeNum)
Near = Round(DecNum * 8,0) / 8
Select Case Near
Case Is = 0
NE = ""
Case Is = 0.125
NE = "1/8"
Case Is = 0.25
NE = "1/4"
Case Is = 0.375
NE = "3/8"
Case Is = 0.5
NE = "1/2"
Case Is = 0.625
NE = "5/8"
Case Is = 0.75
NE = "3/4"
Case Is = 0.875
NE = "7/8"
End Select
Prelim = (number)
Select Case Prelim
Case Prelim > 0 And Prelim < 1
FractionFormat = NE
Case Prelim > 1
FractionFormat = (WholeNum) & "-" & (NE)
End Select
NearestEighth = FractionFormat
End Function
解决方法
考虑:
Public Function NearestEighth(number As Double) As String
Dim wf As WorksheetFunction,n8 As Double
Set wf = Application.WorksheetFunction
n8 = wf.Round(number * 8,0) / 8
NearestEighth = wf.Text(n8,"# -?/8")
End Function
,
Select..Case
仅可用于不同的情况,而不能用于连续范围。
使用If
代替Select Case Prelim.. End Select
:
If Prelim > 0 And Prelim < 1 Then
FractionFormat = NE
ElseIf Prelim > 1 Then
FractionFormat = (WholeNum) & "-" & (NE)
End If
,
使用溢出范围(MS365)写入整个数据集
使用MS 365,您甚至可以调用过程以使用所谓的溢出范围(例如"B1#"
)一次全部写入值,以引用动态目标:
Option Explicit
Sub ShowNearestEighths()
With Sheet1 ' referencing the project's worksheet by Code(Name)
Dim lastRow As Long
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
'calculate nearest eighths
.Range("B1").Formula2 = "=Round(A1:A" & lastRow & " * 8,0) / 8"
'use spill range to format
.Range("B1#").NumberFormat = "# -?/8"
End With
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。