【问题标题】:Storing Mixed-Type Range to Array将混合类型范围存储到数组
【发布时间】:2018-04-23 14:16:42
【问题描述】:

使用以下逻辑将一系列值存储到数组时

 dim arr as variant
 arr = range("A1:B20").value

数字格式设置为文本并在单元格中显示为“US$22,000,000.00”或“£32,000,000.00”或“C$21,000,000.00”等格式的值作为与显示值不同的数字存储到数组中。 (例如,对于第一个“US$22,000,000.00”值,存储在数组元素中的值最终类似于“879732937329”)

我尝试使用以下方法从单元格中获取显示的文本,但是在尝试将数组中的值分配给另一个变量时,它给了我一个类型不匹配错误(我假设 arr 最终是使用时为空:

dim arr as Variant
arr = range("A1:B20").text

有没有办法用范围的文本值填充数组,而无需循环并将每个单元格单独读取到数组元素?

【问题讨论】:

  • 你是怎么得出“鸟”变成像“6783”这样的一串数字的结论的?您是否有实际的代码和数据可以edit 回答您的问题,以便我们重现此问题?就目前而言,您的评估违背了Variant 的目的和定义。如果您在某处遇到类型不匹配错误,您可能会将空字符串视为数字,或者将单元格错误视为数字。不合格的Range 调用隐式引用ActiveSheet - 运行代码时正确的工作表是否处于活动状态?您可以更改它/参考特定的工作表吗?
  • 已编辑问题。我意识到正常的字符串可以正常复制。然而,所描述的测试,其中数字以货币指标为前缀,仍然会产生这个问题。我现在将做一个示例输入 + 输出。
  • @forestaker 您能否使用即时窗口结果的屏幕截图编辑您的帖子,类似于 FloLie 在下面发布的内容?
  • 以货币指标为前缀的数字仍然会产生这个问题 - 那是因为您正在读取范围的Text,而不是它的ValueText 始终是一个String,代表单元格中显示的值的表示,包括任何货币指标。如果您打算将该值存储在数值变量中,请不要使用单元格的Text
  • 问题出在其他地方,因为我尝试将范围读取到数组并将数组元素写入即时窗口,但问题不存在。我将此数组传递给模块中的其他子,因此问题可能出现在其他地方。将尝试继续调试以找到它。我已将 FloLie 的答案标记为正确。

标签: arrays string vba text


【解决方案1】:

您的错误似乎无法重现。以下代码如您所愿:

Sub test()
Dim arr As Variant

arr = Range("A1:A6").Value

For Each entry In arr
    Debug.Print entry & vbTab & TypeName(entry)
Next entry


End Sub

【讨论】:

  • 已编辑问题。我意识到正常的字符串可以正常复制。然而,所描述的测试,其中数字以货币指标为前缀,仍然会产生这个问题。我现在将做一个示例输入 + 输出。
  • 我更喜欢Dim arr() As Variant,但这里没有显着差异。它只是更明显地表明它是一个变体数组而不是未知类型。
猜你喜欢
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 2014-04-28
相关资源
最近更新 更多