希望有人能帮我解决这个问题。我在Access 2003中编写了一个查询,它结合了一个链接表"taxon_group_max_per_site"和一个交叉表查询"Distinct Species by group_Crosstab“。
从表中我有字段"Taxonomic Group"和"Max",从交叉表中有字段"Total_Of_Species_S"。
表和交叉表是链接在一起的,查询运行良好,直到我添加了一些VBA,根据"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帮助中显示的格式完全相同。
发布于 2009-09-11 12:22:20
round函数需要一个数字作为参数,而不是字符串!假设(max)是一个数字,则可以计算:
Round([Max] * 0.75, 0)但
Round("[Max] * 0.75", 0)肯定不会返回任何可行的
发布于 2009-09-11 12:24:51
"Max * 0.875“只是一个字符串,VBA如何知道您引用的是某个表中的列Max?
Max不应该作为第二个整数参数传递给函数吗?如下所示:
Public Function Invert_Diversity_Score (Total_Of_Species_S As Integer,
MaxVal as Integer) As Integer我们需要显示如何调用函数的代码来真正解决这个问题……
发布于 2009-09-11 12:23:43
首先,您应该使用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 Integerhttps://stackoverflow.com/questions/1410518
复制相似问题