我使用以下代码从工作表中的范围创建10行和2列的变体:
Dim ws As Worksheet
Dim leRange As Variant
Set ws = ThisWorkbook.Worksheets(1)
leRange = ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).Value
第一列始终填充,但第二列不填充。
当我在“本地”窗口中检查leRange
时,当单元格中没有任何内容时,该值为Empty
类型的Variant/Empty
。我想将其更改为`Variant / String类型的""
。
我可以循环检查变体并进行替换,但是我想知道是否有更聪明的方法来完成工作,谢谢!
Edit:该函数将这些数据作为参数,需要字符串的变体,并且我无法更改它,因此我需要进行替换。
答案 0 :(得分:3)
声明leRange As String
,您将得到一个String
为空的信息。您的代码与Range.Value
的返回类型无关,由Excel决定。
问题在于leRange
不仅是其他Variant/Empty
:范围不跨越单个单元格,因此变量包含的实际上是变量的2D数组,这就是如何工作。您无法更改从主机应用程序的对象模型中获取的单个数组元素的变体子类型。
Variant/Empty
不等于空字符串:如果单元格实际上为空白,则IsEmpty
返回true。如果单元格包含/计算为空字符串,则IsEmpty
返回false。
请注意,只有Variant
可以保留Error
的值。如果单元格的评估结果为#REF!
,变量子类型将为Variant/Error
,而IsError
将为其返回true-尝试将这样的值分配给String
将导致 type不匹配错误。
Excel为您提供了一个变量数组:您的代码需要处理一个变量数组。 Empty
可以轻松地与""
或vbNullString
进行比较(比较结果为True)-没有要解决的问题,您担心变量子类型放错了位置,没有什么可担心的。>
Edit:将这些数据作为参数的函数需要字符串的变体,并且我无法更改它,因此需要进行替换。
我不确定这是什么意思,但是如果这意味着要将整个2D Variant
数组传递给接受String()
数组的函数,那么是的,您需要声明一个新数组并将您的变体复制到字符串中,否则您可能会期望类型不匹配-这与为您提供数百/数千个单元格一样效率低下,但是如果这与OP中涉及的少数单元格有关,应该还不错。