【问题标题】:Why i get an "type mismatch" error?为什么我收到“类型不匹配”错误?
【发布时间】:2016-05-29 06:27:50
【问题描述】:

我有这个问题, 我有这一行 Dim i, j, x, y, Labels As Integer ,当我想在循环中以以下方式使用 Labels 变量时,我收到一个错误:Labels = CInt(DBRange.Rows(i).Item(10).Value) ,将 DBRange 视为工作表上的一个数据库,其中包含 10列和 10 行为例。 那么,如果变量 i 是一个整数,并且变量 Labels 也是一个整数,并且如果我正在转换使用 CINT 函数将单元格值转换为整数?

【问题讨论】:

  • 工作表上的数据库? Msgbox DBRange.Rows(i).Item(10).Value 返回什么?而Dim i, j, x, y, Labels As Integer 仅将Labels 声明为整数类型其余所有Varaint 类型的变量,即它们可以保存任何数据类型值。使用Dim i As Integer, j As Integer, x As Integer, y As Integer, Labels As Integer 将它们全部声明为整数类型。
  • 注意:Dim i, j, x, y, Labels As Integer 只创建一个整数变量 (Labels)。其他变量被创建为 Variant。您必须在 VB(A) 声明中单独指定每个变量的数据类型。
  • CInt() 函数中的表达式很可能不会返回可转换为整数类型的值。由于 Range 对象的 Item() 属性可能会导致调用它的 Range 之外的单元格,我建议在有问题的行处放置一个断点并使用即时窗口来查询 DBRange 的 .Address 和 .Value 属性。行(i).Item(10)

标签: vba int


【解决方案1】:

@tomalak 是正确的,ijxy 是变体而不是整数。只有Label 是一个整数,变体处理起来可能很慢,应该避免。

凭借现代计算能力和工作量,考虑将integer 替换为Long:-

Integer 可以容纳介于 -32768 和 32767 之间的数字

Long 可以容纳介于 -2147483648 和 2147483647 之间的数字

如果DBRange.Rows(i).Item(10).Value 曾经包含一个整数范围之外的值,或者通过包含非数字字符(即空格)来充当非数字,则会发生错误。如果following way inside a cycle 建立的值超出整数范围,则会发生错误。

确认一下,不是接受CInt() 值的变量导致错误,而是CInt() 的行为导致错误。

我的第一个调试步骤是完整地声明您的变量:- 将 i 调暗为整数 将 j 调暗为整数 将 x 调暗为整数 Dim y As Integer 将标签暗淡为整数

第二个调试步骤是将它们全部转换为Long

最后使用 F8,它会向您显示变量,SO 可能会立即准确地为您提供问题的答案,错误的历史记录是找到解决方案的重要部分。

【讨论】:

  • "确认一下,不是接受 CInt() 值的变量导致错误,而是 CInt() 的行为导致错误。" 你是什么意思?
  • @user3598756 函数CInt() 如果您将字符串传递给它(即“Hello World!”)将出错,例如,它不会将其解析为空或零。因此它不会传递转换后的将值放入失败的Integer 变量中,CInt() 试图将其转换为失败的整数。
  • 这正是我在评论中所写的。但只有与该问题无关的 cmets 获得了支持。 ..
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 2022-06-29
  • 2016-08-27
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
相关资源
最近更新 更多