【问题标题】:Excel VBA - formula inserted by code is not calculatingExcel VBA - 代码插入的公式未计算
【发布时间】:2018-10-30 19:50:26
【问题描述】:

晚上好,

我正在为我的代码而苦苦挣扎。主要问题是不会自动计算公式。 公式由 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

【问题讨论】:

    标签: excel vba formula


    【解决方案1】:

    尝试改变

    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 添加到顶部有助于发现许多错误,例如拼写错误的变量名,并且不会真正造成伤害。

    另一方面,学习如何避免选择绝不是一个坏主意,因为它会带来自己的问题。请看How to avoid using Select in VBA

    【讨论】:

    • 感谢您的反馈。很高兴该解决方案对您有用
    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多