2010-04-12 78 views
3

我已经创建了下面的功能:VBA公共用户定义函数在Excel

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

请告诉我如何解决。

回答

3

确保您的功能位于模块中,而不是工作表中。

6

如果您的UDF所在的工作簿不是您打电话给的工作簿,请以工作簿名称作为前缀。例如。

=PERSONAL.XLS!fyi(500,"USD") 
+1

不知道我会使用这种方法..但+1为晦涩的UDF知识迪克! – 2010-04-13 09:47:05

+1

同意MarkNold。良好的工作@Dick Kusleika – hnk 2014-07-03 02:47:35

11

的功能,如这一点,最好的地方是在一个插件... 要使一个插件:

做一个新的工作簿

按下Alt + F11

创建模块,称之为MyFunctions或其他东西有意义的

把你的功能放在那里

完成所有这些后,将工作簿保存为ExcelAddin(.xlam)并关闭它。 转到Excel选项(或工具/插件)并选择你的插件(或去插件选项卡,然后单击转到然后找到它为Excel 07)

现在你的功能将永远在每个工作簿可用,而无需前缀它

+0

你如何命名模块?当我创建它时,它被命名为“模块”,当我在其上时,上下文菜单不提供“重命名”选项。 – Alexis 2017-03-16 00:56:13

-2

检查错字:功能是fyi而不是fyis

看到最后一行fyis = texts,应该是fyi = texts

+0

'fyis'也是代码中的一个函数。 – 2015-11-22 14:07:35

相关问题