2014-09-30 2 views
0

У меня есть формула Excel:формула вычисления Excel, один раз, затем удаление

=SplitKey(GetSysCd(INDEX([ReportValue],MATCH("mtr_make_model",[FieldName],0)),INDEX([ListName],MATCH("mtr_make_model",[FieldName],0))), 0) 

, который работает несколько подпрограмм в VBA, но, главным образом, соответствующие значения и вставки этих значений в клетку. Когда он находит значение для «mtr_make_model», он запускается и сопоставляет значения внутри таблицы кодов sys. Проблема, с которой я сталкиваюсь, заключается в том, что она вычисляется один раз, а затем удаляет формулу и теперь имеет только значение ... В случае, если я перехожу в поле mtr_make_model и изменяю значение, формула не пересчитывается. Кто-нибудь слышал об этом? Это связано с чем-то в коде VBA? Как заставить эту формулу оставаться на месте, и если определенные значения меняются, формула пересчитывается?

Заранее спасибо.

Вот две функции:

Public Function GetSysCd(ByVal name As String, sysCdTableName As String) As String 
    Dim r As Integer 
    Dim sysCdTable As Range 
    Dim nameList As Variant 
    Dim sysCd As String 

On Error GoTo GetSysCd_Error 

    Set sysCdTable = Worksheets("sys_cd").Range(sysCdTableName) 

    nameList = WorksheetFunction.Index(sysCdTable, 0, 2) 
    r = WorksheetFunction.Match(name, nameList, 0) 
    sysCd = WorksheetFunction.Index(sysCdTable, r, 1) 

    GetOutOfHere: 
    On Error GoTo 0 
     GetSysCd = sysCd 
     Exit Function 

    GetSysCd_Error: 
     sysCd = "" 
     GoTo GetOutOfHere 

    End Function 


Public Function SplitKey(s As String, v As Integer) 
Dim aString As Variant 
Dim r As Integer 

If Len(s) > 2 Then 
    aString = Split(s, "_") 

    If v = 0 Or v = 1 Then 
     SplitKey = aString(v) 
    Else 
     SplitKey = aString(0) 
    End If 

Else 
    SplitKey = "" 
End If 

End Function 

Я не думаю, что функции актуальны на данный момент, а просто вопрос функции не пересчитывая, когда переменная изменяется по формуле ...

+0

Опубликуйте свой код. Я предполагаю, что вы назначаете значение ячейке, а не самой функции. –

+0

Я сделал дополнения –

+0

Проблема в том, что она не пересчитывается ... но я должен упомянуть, что формула ушла после того, как она вычисляет один раз ... Как сохранить формулу для стартеров, тогда как я ее получу для того, чтобы пересчитать, что мне нужна помощь с –

ответ

1

проблема может быть, что Excel только пересчитывает функции, когда один из их аргументов изменений, и ваша функция GetSysCd имеет в виду диапазон, который не находится в списке аргументов

Set sysCdTable = Worksheets («sys_cd»). Диапазон (sysCdTab leName)

где sysCdTableName - это просто строка, а не ссылка.

+0

Как бы я chnage sysCdTableName к ссылке? –

+0

Excel полностью удаляет формулу. Формула не существует после того, как она вычисляет один раз ... Знаете ли вы, почему она удаляла формулу после вычисления один раз? –

+1

Публичная функция GetSysCd (имя ByVal As String, sysCdTable As Range). Сам Excel НЕ удаляет формулы, поэтому это должно быть какое-то VBA где-то, что делает это (возможно, специальные значения вставки) –

0

Вы можете сделать функции пересчитаны в реальном времени, добавив Application.Volatile True в начало каждой функции.

+0

Я добавил, что Application.Volatile True в верхней части обеих функций и результат остается неизменным при изменении значения mtr_make_model ... Кажется, что он не работает. –

Смежные вопросы