首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA数据类型错误-语法错误?

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

Stack Overflow用户
提问于 2009-09-11 12:14:10
回答 3查看 422关注 0票数 0

希望有人能帮我解决这个问题。我在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"

代码语言:javascript
复制
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帮助中显示的格式完全相同。

EN

回答 3

Stack Overflow用户

发布于 2009-09-11 12:22:20

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

代码语言:javascript
复制
Round([Max] * 0.75, 0)

代码语言:javascript
复制
Round("[Max] * 0.75", 0)

肯定不会返回任何可行的

票数 3
EN

Stack Overflow用户

发布于 2009-09-11 12:24:51

"Max * 0.875“只是一个字符串,VBA如何知道您引用的是某个表中的列Max?

Max不应该作为第二个整数参数传递给函数吗?如下所示:

代码语言:javascript
复制
Public Function Invert_Diversity_Score (Total_Of_Species_S As Integer, 
                        MaxVal as Integer) As Integer

我们需要显示如何调用函数的代码来真正解决这个问题……

票数 2
EN

Stack Overflow用户

发布于 2009-09-11 12:23:43

首先,您应该使用ElseIf关键字,没有必要在这里堆叠If

第二,"[Max]*0.5"到底是什么意思?对于VB来说,它是一个字符串,毫不奇怪,它不能与整数相乘。

假设Max是某种全局常量:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
Public Function Invert_Diversity_Score( _
  Total_Of_Species_S As Integer, _
  Max as Integer _
) As Integer
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1410518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档