Excel VBA - формула, вставленная по коду, не рассчитывается - PullRequest
0 голосов
/ 30 октября 2018

Добрый вечер,

Я борюсь с моим кодом. Основная проблема - не вычисляется автоматически формула . Формула вставляется VBA (левая функция) Я пробовал несколько решений, но ничего не работает:

  • включаются автоматически рассчитанные формулы
  • Я пробовал ActiveCell.NumberFormat = "General" - не работает
  • Я пробовал Application.Volatile - не работает
  • Запись текста в столбцы и присвоение ячеек «общему» (работает, но не тогда, когда я помещаю код в свой сценарий)

Не могли бы вы помочь мне, в чем проблема?

Sub QualityCheck()


'załóż filtry, wyszukaj nagłowka "vendor" i posortuj

    Rows("1:1").Select
    Range("F1").Activate
    Selection.AutoFilter
    Selection.Find(What:="Vendor", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Worksheets(1).AutoFilter.Sort.SortFields.Clear
    Worksheets(1).AutoFilter.Sort.SortFields.Add Key:=Range _
        ("K1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With Worksheets(1).AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

'statystyki

    'znajdz wszystkie te same numery vendora i ostatni aktywny ROW
    i = 2
    r = 2
    koniec = Range("K" & Rows.Count).End(xlUp).Row

    Columns("N:N").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    Do Until Range("K" & r) < koniec

            Do Until Range("K" & i) <> Range("K" & i + 1)

                    Range("N" & i).Select
                    Formula = "=left(M" & i & ";1)"
                    Range("N" & i).Formula = Formula  'OFFSET DODAC ALBO COS

                    ActiveCell.NumberFormat = "General"

                i = i + 1 'i to bedzie nasz ostatni row
            Loop

        r = r + 1
    Loop

    Selection.TextToColumns Destination:=Range("N1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True


End Sub

1 Ответ

0 голосов
/ 30 октября 2018

Попробуйте изменить

Range("N" & i).Select
Formula = "=left(M" & i & ";1)"
Range("N" & i).Formula = Formula 

Для

Range("N" & i).Formula = "=left(M" & i & ",1)"

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

Стоит отметить, что вы идете в обход способа установки формулы, устанавливая ее в качестве переменной переменной, а затем устанавливая ее в формуле, которая, кстати, не объявлена. Добавление Option Explicit в начало помогает отлавливать множество ошибок, таких как имена переменных с ошибками, и никогда не причиняет вреда.

С другой стороны, никогда не бывает плохой идеей научиться избегать выбора, поскольку он создает свои собственные проблемы. Пожалуйста, смотрите Как избежать использования Select в VBA

...