Crystal reports Crystal报告公式类型不匹配

Crystal reports Crystal报告公式类型不匹配,crystal-reports,vb6,type-mismatch,Crystal Reports,Vb6,Type Mismatch,我正在从VB6应用程序(Crystal Reports 6)加载Crystal Report,我需要传入两个公式的值 要做到这一点,我必须 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) 但是,当我运行应用程序

我正在从
VB6
应用程序(Crystal Reports 6)加载Crystal Report,我需要传入两个公式的值

要做到这一点,我必须

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)
但是,当我运行应用程序并尝试查看报告时,会出现运行时错误

类型不匹配

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


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

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

' 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)

我目前无法访问我的代码以获得确切的语法,但您需要循环遍历所有公式(数字索引),并检查每个公式的名称(或类似的内容)属性。如果你到今天晚上还没有自己解决这个问题,或者其他人没有给你展示正确的方法,我将尝试发布一个示例答案。@BillHileman现在我有一个临时解决方案,但我已经硬编码了公式的索引。如果你能在你有能力的时候发布你的方法,那就太完美了,因为如果以后有其他公式添加到报告中,我的公式显然会被破坏。你是如何声明/定义
crxFormula
as的?当我试图按原样编译时,它说“变量未定义”,我在答案中添加了声明。我不确定项目中需要包括哪些参考。由于我的报告是以这种方式创建的,并且在整个应用程序中都是这样做的,不幸的是,这对我来说不起作用。不过,感谢您的尝试。值得一提的是,我使用报表编写器本身创建了Crystal报表(我使用的是旧版本8.5,因为我的数据文件是旧版本的Btrieve数据),但我使用API直接访问代码中的.rpt文件,并通过报表查看器显示它们。这使我能够动态地定制它们。您使用的是什么版本以及如何在代码中获取crExport变量?我只是使用
CrystalReport
控件,将其拖到表单上