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)
我正在从 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)