我创建了以下功能:
Option Explicit
Public Function fyi(x As Double, f As String) As String
Application.Volatile
Dim data As Double
Dim post(5)
post(1) = "Ribu "
post(2) = "Juta "
post(3) = "Milyar "
post(4) = "Trilyun "
post(5) = "Ribu Trilyun "
Dim part As String
Dim text As String
Dim cond As Boolean
Dim i As Integer
If (x < 0) Then
fyi = " "
Exit Function
End If
If (x = 0) Then
fyi = "Nol"
Exit Function
End If
If (x < 2000) Then
cond = True
End If
text = " "
If (x >= 1E+15) Then
fyi = "Nilai Terlalu Besar"
Exit Function
End If
For i = 4 To 1 Step -1
data = Int(x / (10 ^ (3 * i)))
If (data > 0) Then
part = fyis(data, cond)
text = text & part & post(i)
End If
x = x - data * (10 ^ (3 * i))
Next
text = text & fyis(x, False)
fyi = text & f
End Function
Function fyis(ByVal y As Double, ByVal conds As Boolean) As String
Dim datas As Double
Dim posts(2)
posts(1) = "Puluh"
posts(2) = "Ratus"
Dim parts As String
Dim texts As String
'Dim conds As Boolean
Dim j As Integer
Dim value(9)
value(1) = "Se"
value(2) = "Dua "
value(3) = "Tiga "
value(4) = "Empat "
value(5) = "Lima "
value(6) = "Enam "
value(7) = "Tujuh "
value(8) = "Delapan "
value(9) = "Sembilan "
texts = " "
For j = 2 To 1 Step -1
datas = Int(y / 10 ^ j)
If (datas > 0) Then
parts = value(datas)
If (j = 1 And datas = 1) Then
y = y - datas * 10 ^ j
If (y >= 1) Then
posts(j) = "belas"
Else
value(y) = "Se"
End If
texts = texts & value(y) & posts(j)
fyis = texts
Exit Function
Else
texts = texts & parts & posts(j)
End If
End If
y = y - datas * 10 ^ j
Next
If (conds = False) Then
value(1) = "Satu "
End If
texts = texts & value(y)
fyis = texts
End Function
当我返回Excel并在单元格中输入=fyi(500,"USD")
时,它会返回#name
。
请告诉我如何解决。
答案 0 :(得分:11)
此类功能的最佳位置是Addin ... 制作插件:
制作新工作簿
点击alt + F11
创建一个模块,称之为MyFunctions或其他有意义的
将你的功能放在那里
完成所有这些操作后,将工作簿另存为ExcelAddin(.xlam)并关闭它。 转到Excel选项(或工具/插件)并选择您的插件(或转到插件选项卡,然后单击Go,然后找到excel 07)
现在,您的功能将始终在每个工作簿中可用,而不必添加前缀
答案 1 :(得分:7)
如果您的UDF位于您的调用工作簿以外的工作簿中,请在udf前加上工作簿名称。 E.g。
=PERSONAL.XLS!fyi(500,"USD")
答案 2 :(得分:6)
请参阅此相关问题:Create a custom worksheet function in Excel VBA
总结:
你有什么应该工作。
根据对该问题的评论,您应该将用户定义的函数放在 ThisWorkbook以外的任何模块中。
答案 3 :(得分:3)
确保您的功能在模块中,而不是在工作表中。
答案 4 :(得分:-2)
检查拼写错误:该功能为fyi
而非fyis
。
请参阅最后一行fyis = texts
,它应为fyi = texts
。