Crystal 报告公式类型不匹配

Crystal Reports formula type mismatch

我正在从 VB6 应用程序(Crystal 报告 6)加载 Crystal 报告,我需要为两个公式传递值。

为此,我有

crExport.Formulas("@thisYear") = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 5, 2)
crExport.Formulas("@thisPeriod") = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 7, 2)

但是,当我 运行 应用程序并尝试查看报告时,我收到 运行 时间错误

Type mismatch

一旦我到达第一个公式行。是什么导致了这个问题?

我试过从公式名称中删除 @ 符号,我在分配它们之前将两个值都转换为整数,但它们都产生了相同的错误。

下面是我如何为老化报告设置公式值的示例:

' Global Declarations
Public crxApp As CRAXDRT.Application

Public crxRpt As CRAXDRT.Report
Public crxTable As CRAXDRT.DatabaseTable
Public crxFormula As CRAXDRT.FormulaFieldDefinition

老化报告部分:

  For Each crxFormula In crxRpt.FormulaFields
    Select Case crxFormula.FormulaFieldName
      Case CR_FORMULA_COMPANY_NAME
        crxFormula.Text = QuoteIt(Trim(strCompanyName(1)))
      Case CR_FORMULA_GROUP_1_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(1), " ", "")
      Case CR_FORMULA_GROUP_2_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(2), " ", "")
      Case CR_FORMULA_GROUP_3_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(3), " ", "")
      Case CR_FORMULA_GROUP_4_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(4), " ", "")
      Case CR_FORMULA_GRAND_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGrand, " ", "")
      Case "Processing Date"
        crxFormula.Text = "Date(" & QuoteIt(Format(dtpProcDate.Value, "Short Date")) & ")"
      Case "Days Col 1"
        crxFormula.Text = CStr(txtPeriod(0).Value)
      Case "Days Col 2"
        crxFormula.Text = CStr(txtPeriod(1).Value)
      Case "Days Col 3"
        crxFormula.Text = CStr(txtPeriod(2).Value)
      Case "Days Col 4"
        crxFormula.Text = CStr(txtPeriod(3).Value)
      Case "Age Type"
        Select Case True
          Case optAgingType(0).Value
            crxFormula.Text = QuoteIt(optAgingType(0).Tag)
          Case optAgingType(1).Value
            crxFormula.Text = QuoteIt(optAgingType(1).Tag)
          Case optAgingType(2).Value
            crxFormula.Text = QuoteIt(optAgingType(2).Tag)
          Case optAgingType(3).Value
            crxFormula.Text = QuoteIt(optAgingType(3).Tag)
        End Select
      Case "Summary"
        crxFormula.Text = IIf(optReportType(1).Value, "True", "False")
    End Select
    crxFormula.Check blnFormulaOK, strFormulaErr
    If Not blnFormulaOK Then
      MsgBox CR_FORMULA_ERROR_TEXT & crxFormula.FormulaFieldName & vbNewLine & vbNewLine & _
             strFormulaErr & vbNewLine & vbNewLine & _
             Trim(crxFormula.Text), vbCritical, CR_FORMULA_ERROR_TITLE
      Exit For
    End If
  Next crxFormula

解决这个问题的方法是使用公式的索引而不是名称来设置值。

所以在这种情况下

crxReport.FormulaFields(0).Text = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 5, 2)
crxReport.FormulaFields(1).Text = Mid(DB_Period_Name$, Len(DB_Period_Name$) - 7, 2)