Открытая пользовательская функция VBA в Excel - PullRequest
4 голосов
/ 12 апреля 2010

Я создал функцию ниже:

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.

Пожалуйста, сообщите мне, как решить.

Ответы [ 5 ]

11 голосов
/ 14 апреля 2010

Лучшее место для таких функций, как это в Addin ... Чтобы сделать дополнение:

Создать новую рабочую книгу

нажмите Alt + F11

создайте модуль, назовите его MyFunctions или что-то еще значащее

брось туда свою функцию

После того, как вы все это сделали, сохраните вашу книгу как ExcelAddin (.xlam) и закройте ее. Перейдите в Параметры Excel (или Инструменты / надстройки) и выберите надстройку (или перейдите на вкладку надстроек и нажмите Перейти, затем найдите его для Excel 07)

Теперь ваша функция всегда будет доступна в каждой книге без префикса

7 голосов
/ 12 апреля 2010

Если ваш UDF находится в книге, отличной от книги, из которой вы звоните, добавьте префикс udf к названию книги. Э.Г.

=PERSONAL.XLS!fyi(500,"USD")
6 голосов
/ 12 апреля 2010

См. Этот связанный вопрос: Создание пользовательской функции рабочего листа в Excel VBA

В итоге:
Что у тебя должно работать.
Основываясь на комментариях к этому вопросу, вы должны поместить свою пользовательскую функцию в любой модуль, кроме ThisWorkbook .

3 голосов
/ 12 апреля 2010

Убедитесь, что ваша функция находится в модуле, а не в рабочем листе.

0 голосов
/ 22 ноября 2015

Проверьте опечатку: функция fyi не fyis.

См. Последнюю строку fyis = texts, должно быть fyi = texts.

...