希望有人可以帮我解决这个问题。我在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帮助中显示的格式完全相同。
答案 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