通过cells.formula和错误1004分配公式

时间:2017-06-09 20:29:57

标签: excel vba excel-vba

我收到了与下面代码相关的错误。奇怪的是,我能够访问并写入cells.formula属性,只需立即找到,我就能立即运行公式。错误是“应用程序定义的错误或对象定义的错误”。由于我不知道是什么导致了这个问题,我在这里粘贴了整个代码,看看有没有人看到可能导致它的东西。这很奇怪......

' This function adds a column to an existing table if the table does not already has the function, or updates the table with the new values as needed
Public Function AddAssocStds(objSheet As Worksheet) As Boolean
    Dim i As Integer
    Dim rowHeader As Integer
    Dim CombDes As Integer
    Dim AssocStd As Integer
    Dim SAP As Variant
    Dim Stockcode As Variant
    Dim Mincom As Variant
    Dim WriteAssocStd As String

    ' Defines my header row
    rowHeader = 1
    ' A specific row to look up in an existing table
    CombDes = -1
    ' This is the write row
    AssocStd = -1
    i = 1

    ' Speeding up the run, speed play
    Application.ScreenUpdating = False

    ' Registers the columns in the sheet correctly first
    For i = 1 To objSheet.Cells(rowHeader, objSheet.Columns.Count).End(xlToLeft).Column
        Select Case Cells(rowHeader, i).value
            Case "CombinedDescription"
                CombDes = i
            Case "AssocStds"
                AssocStd = i
            Case "SAP"
                SAP = objSheet.Range(objSheet.Cells(rowHeader + 1, i), objSheet.Cells(objSheet.UsedRange.Count, i)).value
            Case "Stockcode"
                Stockcode = objSheet.Range(objSheet.Cells(rowHeader + 1, i), objSheet.Cells(objSheet.UsedRange.Count, i)).value
            Case "Mincom"
                Mincom = objSheet.Range(objSheet.Cells(rowHeader + 1, i), objSheet.Cells(objSheet.UsedRange.Count, i)).value
        End Select
    Next

    ' Determines which column to write to - either inserts after combdes column or make a new column
    If AssocStd = -1 Then
        If CombDes = -1 Then
            AssocStd = objSheet.Cells(rowHeader, objSheet.Columns.Count).End(xlToLeft).Column + 1
        Else
            objSheet.Range(Cells(1, CombDes + 1), Cells(1, CombDes + 1)).EntireColumn.Insert
            AssocStd = CombDes + 1
        End If
    End If

    ' Writes the header for the new column
    objSheet.Cells(rowHeader, AssocStd).value = "AssocStds"

    ' Resets the counter
    i = 1

    ' Loops throught the entire column
    For i = 1 To objSheet.UsedRange.Count - rowHeader
        If NotNull(CStr(SAP(i, 1))) Then
            WriteAssocStd = AssocStdsGen(CStr(SAP(i, 1)))
        Else
            WriteAssocStd = "-1"
        End If

        If WriteAssocStd = "-1" And NotNull(CStr(Stockcode(i, 1))) Then
            WriteAssocStd = AssocStdsGen(CStr(Stockcode(i, 1)))
        Else
            WriteAssocStd = "-1"
        End If

        If WriteAssocStd = "-1" And NotNull(CStr(Mincom(i, 1))) Then
            WriteAssocStd = AssocStdsGen(CStr(Mincom(i, 1)))
        Else
            WriteAssocStd = "-1"
        End If

        ' This is where the problem happens, when writing as a formula, it doesn't work...
        If WriteAssocStd = "-1" Then
            objSheet.Cells(i + rowHeader, AssocStd).Formula = "=IF(UPPER([@Standard RR]) <> " & Chr(34) & "NON-STD" & Chr(34) & ", [@Standard RR] &" & Chr(34) & "-" & Chr(34) & "&[@PlanNo] & " & Chr(34) & "." & Chr(34) & "& TEXT([@SheetNo], " & Chr(34) & "00" & Chr(34) & "), [@Standard RR])"
        Else
            objSheet.Cells(i + rowHeader, AssocStd).value = WriteAssocStd
        End If
    Next

    AddAssocStds = True

    Application.ScreenUpdating = True
End Function

附加说明:

  • 该公式本身可以在excel中工作,正如未提示错误的行所证明的那样
  • 错误似乎只发生在最后一行。我有一个奇怪的费用可能是相关的

0 个答案:

没有答案