2014-10-13 5 views
0

Я получил некоторую помощь здесь, чтобы объявить формулу как константу в vba. У меня есть приблизительно десять формул, все похожие варианты на тему. Я установил 9 из них, и они прекрасно работают ниже один подбрасывает ошибку времени выполнения (Ошибка выполнения «1004», приложение или объект определенных ошибокОбъявление формулы excel в качестве константы в vba

Option Explicit 
Public Const csFORMULA = "=CONCATENATE(""AVABIS"",IF(I2=0,"""",CONCATENATE(UPPER(AlphaNumericOnly(LEFT(I2,3))),UPPER(AlphaNumericOnly(RIGHT(I2,3))))),IF(O2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(O2,""0"","""")))),IF(R2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(R2,""0"","""")))),IF(W2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(W2,""0"","")))),IF(AB2=0,"""",AlphaNumericOnly(SUBSTITUTE(AB2,""0"",""""))),IF(AC2=0,"""",AlphaNumericOnly(SUBSTITUTE(AC2,""0"",""""))),IF(AD2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AD2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AF2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AF2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AH2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AH2,""-"",""X""),""."",""Y""),""0"",""Z""))))" 


Sub AvivaBIS() 


    Dim lr   As Long 
    Dim cl   As Range 
    Dim rng  As Range 
    Dim mssg  As String 
    Dim ws   As Worksheet 

    Application.ScreenUpdating = False 
    Set ws = ActiveSheet 

    With ws 

     lr = .Range("I" & Rows.Count).End(xlUp).Row 
     'add the formula to generate the unique key 
     Range("B2:B" & lr).Formula = csFORMULA 
     Range("B2:B" & lr) = Range("B2:B" & lr).Value 


    End With 

    Set rng = Nothing 
    Set ws = Nothing 
    Application.ScreenUpdating = True 

End Sub 

Я удалил. другой несущественные код из выше упростить мой вопрос

шагов я взял до сих пор:.

Пытался вставить оригинальную формулу прямо в листе - это работает

Пробовал замену. (например, A1 + A2) - это работает.

Двойной проверил кавычки, чтобы увидеть, что у меня есть правильный номер - они кажутся прекрасными.

Скопировал другую очень похожую формулу из других, которые я создал - это тоже работает.

Любые предложения относительно того, что еще я мог бы исправить, было бы с благодарностью принято. Есть ли способ получить больше информации, когда она вызывает ошибку во время выполнения?

Спасибо, как всегда за то, что нашли время, чтобы посмотреть.

+0

Не можете ли вы просто ввести формулу в какую-либо скрытую ячейку и скопировать ее в требуемый диапазон? Это безопаснее, чем ввод строки, поскольку язык может меняться (разделители списков) –

+0

Debug.print константа, затем попробуйте скопировать/вставить ее в B2. Вы получили сообщение об ошибке? –

ответ

1

Вы пропустили удвоение на одном наборе двойных кавычек с пустой строкой (сразу после W2 примерно в середине формулы) и в конце у вас была дополнительная закрывающая скобка.

Public Const csFORMULA = "=CONCATENATE(""AVABIS"",IF(I2=0,"""",CONCATENATE(UPPER(AlphaNumericOnly(LEFT(I2,3))),UPPER(AlphaNumericOnly(RIGHT(I2,3))))),IF(O2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(O2,""0"","""")))),IF(R2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(R2,""0"","""")))),IF(W2=0,"""",UPPER(AlphaNumericOnly(SUBSTITUTE(W2,""0"","""")))),IF(AB2=0,"""",AlphaNumericOnly(SUBSTITUTE(AB2,""0"",""""))),IF(AC2=0,"""",AlphaNumericOnly(SUBSTITUTE(AC2,""0"",""""))),IF(AD2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AD2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AF2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AF2,""-"",""X""),""."",""Y""),""0"",""Z"")),IF(AH2=0,"""",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AH2,""-"",""X""),""."",""Y""),""0"",""Z"")))" 
+1

Метод, который я использую, заключается в том, чтобы сначала получить формулу, которая корректно работает как формула в ячейке рабочего листа. Затем я копирую это в VBE по одной строке и (игнорируя любые сообщения об ошибках), использую Ctrl + H, чтобы заменить все «на». Я беру измененную строку и вырезаю ее и вставляю туда, где хочу ее внутри набор двойных кавычек. HTH. – Jeeped

+0

спасибо, я пытался выяснить способ преобразования формулы из той, которая работала в функции, на объявленную. – chris1982

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