VBA数据类型错误 - 语法错误?

时间:2009-09-11 12:14:10

标签: ms-access vba

希望有人可以帮我解决这个问题。我在Access 2003中编写了一个查询,它将一个链接表"taxon_group_max_per_site"和一个交叉表查询“groupinCrosstab的Distinct Species”组合在一起。

在表格中,我有字段"Taxonomic Group""Max",并在交叉表中显示字段"Total_Of_Species_S"

表和交叉选项卡已链接,查询工作正常,直到我添加一些VBA为每个Taxonomic组提供基于"Max""Total_Of_Species_S"的分数。

以下代码显示"Error 13: type mismatch"

Public Function Invert_Diversity_Score (Total_Of_Species_S As Integer) As Integer

    If Total_Of_Species_S < Round("[Max]*0.5", 0) Then
      Invert_Diversity_Score = 0
    Else
      If Total_Of_Species_S < Round("[Max] * 0.75", 0) Then
        Invert_Diversity_Score = 1
      Else
        If Total_Of_Species_S < Round("[Max] * 0.875", 0) Then
          Invert_Diversity_Score = 2
        Else
          Invert_Diversity_Score = 3
        End If
      End If
    End If

End Function

调试器显示"[Max]*0.5"和其他乘法不会产生一个数字"[Max] * 0.5"= "[Max] * 0.5",我认为这是类型不匹配的来源。如何正确地将字段设置为多个?它看起来与VBA帮助中显示的格式完全相同。

3 个答案:

答案 0 :(得分:3)

round函数期望一个数字作为参数,而不是字符串!假设(max)是一个数字,则可以计算:

Round([Max] * 0.75, 0)

但是

Round("[Max] * 0.75", 0)

肯定不会返回任何可行的

答案 1 :(得分:2)

“[Max] * 0.875”只是一个字符串,VBA如何知道你是指你的一个表中的[Max]列?

不应该将[Max]作为第二个整数参数传递给函数吗?像这样:

Public Function Invert_Diversity_Score (Total_Of_Species_S As Integer, 
                        MaxVal as Integer) As Integer

我们需要显示你如何调用函数的代码来真正对它进行排序......

答案 2 :(得分:1)

首先,您应该使用ElseIf关键字,不需要在此处堆叠If

第二 - "[Max]*0.5"应该是什么意思?对VB来说,它是一个字符串,毫不奇怪你不能用整数乘以。

假设Max是某种全局常量:

Public Function Invert_Diversity_Score(Total_Of_Species_S As Integer) As Integer

  If Total_Of_Species_S < Round(Max * 0.5, 0) Then
    Invert_Diversity_Score = 0
  ElseIf Total_Of_Species_S < Round(Max * 0.75, 0) Then
    Invert_Diversity_Score = 1
  ElseIf Total_Of_Species_S < Round(Max * 0.875, 0) Then
    Invert_Diversity_Score = 2
  Else
    Invert_Diversity_Score = 3
  End If

End Function

如果它不是常量,那么你也必须将它传递给函数:

Public Function Invert_Diversity_Score( _
  Total_Of_Species_S As Integer, _
  Max as Integer _
) As Integer