错误 "The Remaining Text Does Not Appear To Be Part Of The Formula" Crystal 报告 11.5.8.826

Error "The Remaining Text Does Not Appear To Be Part Of The Formula" Crystal Reports 11.5.8.826

我收到 Crystal 报告中问题标题中所述的错误。我已经进行了一段时间的故障排除,并且正在绘制空白。我在单独的公式中有一些简单的 If..Then..Else 语句和 Select..Case 语句,但我收到了所有这些相同的错误。我正在 VB.Net 中编写公式,我怀疑问题出在我声明变量的方式上。

一个公式的例子是:

Dim xyz As Number = {VALUE1} 
Dim array1 = New Integer() {1111, 1112, 1214, 1215} 
Dim array2 = New Integer() {1211, 1212, 1213, 1414, 1415} 
Dim array3 = New Integer() {1311, 1312, 1514, 1515} 
Dim array4 = New Integer() {1911} 

If Array.IndexOf(array1, xyz) >= 0 Then
    {VALUE2} & "_001"
ElseIf Array.IndexOf(array2, xyz) >= 0 Then
    {VALUE2} & "_002"
ElseIf Array.IndexOf(array3, xyz) >= 0 Then
    {VALUE2} & "_003"
ElseIf Array.IndexOf(array4, xyz) >= 0 Then
    {VALUE2} & "_004"
Else
    {VALUE2}
End If

当我将该公式输入所选字段时,它会突出显示第 1 行 = 符号后的所有内容 (Dim xyz As Number =...)。

搜索后,我尝试使用带等号的冒号 (:=) 和 semi-colons 来结束 if 语句,但在网上找不到更多的指导。我确实发现线程暗示 .dll 可能丢失,但我目前没有对我正在使用的系统上的很多区域的写权限,所以任何类似的修复对我来说都是不可能的。

简而言之,我的问题是为什么我会收到此错误消息?是我的 If..Then..Else 语法还是我声明变量的方式?还是我只是不应该像现在这样在 crystal 报告中使用 VB.Net?

你的语法在 Crystal 报告中使用是错误的,它总是以数据类型开头,然后是变量名,如

numbervar pos;
stringvar cpu;
numbervar pos := 0;
stringvar cpu := 'abc';
NumberVar k := {@Counting_Data}/{@Counting_Fail} 

这个link你类似的问题有crystal reports error : remaining text does not appear to be part of the formula

如果你对变量有更多的了解,变量的作用域有3种

  • 本地
  • 全球
  • 共享

https://www.tutorialspoint.com/crystal_reports/crystal_reports_creating_variables.htm

Crystal 确实支持基本语法,但它更类似于 VBA 或 VB6 而不是 .Net,并且也有其自身的特点和局限性。

  • 声明时没有初始化
  • Return 值是 "Formula =",它不是隐含在 Crystal 语法中。
  • 大多数函数和运算符更像是 Crystal 语法而不是常规的基本语法。
  • 所有 return 值必须是同一类型。

这就是我认为你想要的:

Dim xyz As Number
Dim array1() as number
Dim array2() as number
Dim array3() as number
Dim array4() as number

xyz = {VALUE1}
array1 =  array(1111, 1112, 1214, 1215)
array2 = array(1211, 1212, 1213, 1414, 1415)
array3 = array(1311, 1312, 1514, 1515)
array4 = array(1911)

If  (xyz in array1) Then
    Formula = {VALUE2} & "_001"
ElseIf (xyz in array2) Then
    Formula = {VALUE2} & "_002"
ElseIf (xyz in array3) Then
    Formula = {VALUE2} & "_003"
ElseIf (xyz in array4) Then
    Formula = {VALUE2} & "_004"
Else
    Formula = totext({VALUE2})
End If