【问题标题】:Typecasting Variant Array into String or Boolean Array将变体数组类型转换为字符串或布尔数组
【发布时间】:2017-02-16 21:33:30
【问题描述】:

我的 Excel 工作表中有几个命名范围,用于在会话之间存储 VBA 宏的数据。加载时,我需要将该数据放入多个数组(StringBooleans)。

Dim arr() As Variant
Dim rg As Range

Set rg = Sheets("Calc").Range("myRange")
arr = rg.Value2

如何将arr() 类型转换为StringBoolean 数组以在我的宏中使用?

如果我尝试使用 Variant 数组,我会在函数调用中得到 ByRef argument mismatch errors

或者是否有其他方法可以将范围的内容放入Variant 以外的其他类型的数组中?

后一个问题的搜索没有产生结果。

【问题讨论】:

  • 对于布尔值,您必须循环填充数组。对于字符串,只要是单行或单列的范围,稍微乱七八糟就可以了,但是循环还是比较简单的。
  • 在传递给你的函数时,你不能将它转换为字符串等吗? CStr(arr(1, 1)) 之类的东西 - 或者你是否将整个数组传递给你的函数?
  • 除了在循环中手动转换之外,我不知道有任何其他方法可以做到这一点。在函数中测试类型并通过 Variant:If VarType(v) = vbBoolean Then 不是更容易吗?

标签: vba excel casting


【解决方案1】:

最简单的方法是将数组声明为字符串或布尔数组,就像这样:

Dim arr() as String
Dim arr() as Boolean

顺便说一句,它也适用于函数。

如果由于类型不匹配而无法加载整个范围,请将其加载到临时变量数组中,然后重新调整字符串或布尔数组以匹配和循环所有内容并使用转换函数:CBool, @ 987654323@, CInt, CDbl, ...

【讨论】:

  • 我试图避免循环,但这似乎是最简单的方法。循环遍历 bat 右侧的范围而不是先加载到变体数组中不是更容易吗?
  • 您可以对其进行测试,但是从一个范围加载一个数组并在该数组上工作非常快,尽管在特定单元格中读取信息不是那么长,但效率并不高。您可以通过设置变量StartTime = Timer 来检查代码花费的时间,最后:MsgBox "Done in " & Timer - StartTime & " seconds"
  • @ChrisUnbroken 很高兴我能帮上忙,如果我能要求你支持我的回答,那就太好了(我正在制作我的“Refiner”徽章)。尽情享受吧 ;)
  • 我以前会这样做,但我只是通过了这样做所需的 15 名声望 :) 再次感谢
  • 我知道我赞成你的 2 个问题,这样你就可以了! ;) 这就是我事后戳你的原因^^ 祝你旅途愉快!谢谢投票! ;)
猜你喜欢
  • 2015-02-23
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多