2015-01-15 4 views
0

я пытаюсь выполнить этот код в моем первенствовать листExcel ошибки VBA 1004 - вставить формулу

ActiveCell.Offset(0, 3).Formula = "=if(SUM(N" & i + 2 & ":N" & i + 5 & ")>0;MEDIAN(N" & i + 2 & ":N" & i + 5 & ");0)" 

и я получаю сообщение об ошибке # 1004 без какой-либо дополнительной информации. Может ли кто-нибудь разглядеть мою неудачу? я ВГ некоторых другие формуляры вставки таким же образом ... ТНХ

EDIT: Мои таблицы похожи, что enter image description here

Это должно быть управление проектами инструмента - Breitband Delphi Method;) Так что мой код идет через все строки и проверить в каком столбце дескриптор (уровень 1,2,3,4). Далее код добавляет строки 8-12, например .. здесь я могу ввести некоторую информацию для проекта ... и теперь мой скрипт должен добавить формулу в столбец k-n.

Мой код не очень хорошо (как мой английский :)) - это просто прототип ..

Это мой Петля

i = 5 
    canSkip = False 
    Do 
     ' fist first the level 
     If Not IsEmpty(Range("B" & i).Value) Then 
      level = 1 

      If Not IsEmpty(Range("D" & i + 1)) Then 
       ' ye we can - so skip this loop 
       canSkip = True 
      End If 
     ElseIf Not IsEmpty(Range("D" & i).Value) Then 
      level = 2 
      If Not IsEmpty(Range("F" & i + 1)) Then 
       ' ye we can - so skip this loop 
       canSkip = True 
      End If 
     ElseIf Not IsEmpty(Range("F" & i).Value) Then 
      level = 3 
      If Not IsEmpty(Range("H" & i + 1)) Then 
       ' ye we can - so skip this loop 
       canSkip = True 
      End If 
     ElseIf Not IsEmpty(Range("H" & i).Value) Then 
      level = 4 
      canSkip = False 
     End If 

     If canSkip = True Then 
      i = i + 1 
     Else 
      ' First insert some... and bang it to a group 
      ' Insert Formula 
      Range("K" & i).Activate 
      ActiveCell.Formula = "=min(L" & i + 2 & ":L" & i + 5 & ")" 
      ActiveCell.Offset(0, 1).Formula = "=max(L" & i + 2 & ":L" & i + 5 & ")" 
      'Range("T1").FormulaLocal = insertMedianFormula 
      'ActiveCell.Offset(0, 3).Formula = "=WENN(SUMME(N" & i + 2 & ":N" & i + 5 & ")>0;MITTELWERT(N" & i + 2 & ":N" & i + 5 & ");0)" 
      Range("A" & i + 1).Activate 
      For x = 1 To 5 
       ActiveCell.EntireRow.Insert 
       If x = 5 Then 
        If level = 1 Then 
         ActiveCell.Offset(0, 1).Value = "Experte" 
         ActiveCell.Offset(0, 2).Value = "Aufw." 
         ActiveCell.Offset(0, 3).Value = "Bemerkung" 
        ElseIf level = 2 Then 
         ActiveCell.Offset(0, 3).Value = "Experte" 
         ActiveCell.Offset(0, 4).Value = "Aufw." 
         ActiveCell.Offset(0, 5).Value = "Bemerkung" 
        ElseIf level = 3 Then 
         ActiveCell.Offset(0, 5).Value = "Experte" 
         ActiveCell.Offset(0, 6).Value = "Aufw." 
         ActiveCell.Offset(0, 7).Value = "Bemerkung" 
        ElseIf level = 4 Then 
         ActiveCell.Offset(0, 7).Value = "Experte" 
         ActiveCell.Offset(0, 8).Value = "Aufw." 
         ActiveCell.Offset(0, 9).Value = "Bemerkung" 
        End If 
        ' now just bang it to a group 
        ActiveCell.Resize(5, 10).Rows.Group 
       End If 
      Next x 
      i = i + 6 
     End If 

     ' are we finshed? 
     If i > lastUsedRow Then 
      Exit Do 
     End If 
     canSkip = False 
    Loop 
+3

Вы пробовали, 's для'; ' s? – pnuts

+0

Да, я скопировал формулу из своего листа примеров и просто добавлю переменные. – Tobias

+0

Как определяется 'i'? – Chrismas007

ответ

1

Оригинальная формула (стандарт MS) использует ", "вместо" ; "

ActiveCell.Offset(0, 3).Formula = "=IF(SUM(N" & i + 2 & ":N" & i + 5 & ")>0,MEDIAN(N" & i + 2 & ":N" & i + 5 & "),0)" 

или использование:

ActiveCell.Offset(0, 3).FormulaLocal = "=IF(SUM(N" & i + 2 & ":N" & i + 5 & ")>0;MEDIAN(N" & i + 2 & ":N" & i + 5 & ");0)" 

Пожалуйста, обратитесь в этом:
Formula
FormulaLocal

[EDIT]

Прежде всего ...
IsEmpty указывает, был ли инициализирован переменная (варианта) , Итак, если вы хотите проверить, если ячейка пуста (не содержит никакого значения), используйте:

Range("B" & i)<>"" 

Во-вторых ..
Ваш код не имеет контекста. Что это значит? Использование ActiveCell или Диапазон ("") или Cell() зависит от того, какая рабочая книга (и ее листы) фактически используется! Вы должны использовать код в контексте:

With ThisWorkbook.Worksheets("SheetName") 
    .Range("A1").Offset(0,i).Formula = "='Hello Kitty'" 
    .Cell(2,i) = "123.45" 
End With 

Треть всех ...
Обзор и отладки вы код и начать заново, используя вышеуказанные советы;)

+1

Это правильный ответ, почему он был опущен? Я повторяю ошибку @Tobias с помощью;; и код работает отлично, как пишет Maciej Los. Пожалуйста, сообщите нам, что это не работает. –

+0

Я не знаю, кто его ниспровергал ... я пробовал оба решения, но я получаю тот же код ошибки .. «1004» У меня нет больше информации об этой ошибке – Tobias

+0

Тобиас сказал, что первая версия не решает его проблема, и если в первой версии нет шансов выглядеть бедной, что вторая версия. Это может быть хороший ответ, но, похоже, не на этот * вопрос. – pnuts

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