Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选项Base 1出现问题,并且移除了VBA的副本_Vba_Excel - Fatal编程技术网

选项Base 1出现问题,并且移除了VBA的副本

选项Base 1出现问题,并且移除了VBA的副本,vba,excel,Vba,Excel,是否有人知道如何避免在VBA中执行以下代码时出现类型不匹配错误消息: For i = 1 To DataRange.Columns.Count 'MyArray(i) = i text1 = text1 & i & "|" Next text1 = Left(text1, Len(text1) - 1) MyArray = Split(text1, "|") DataRange.RemoveDuplicates Columns:=VBA.Array(MyArray

是否有人知道如何避免在VBA中执行以下代码时出现类型不匹配错误消息:

For i = 1 To DataRange.Columns.Count
    'MyArray(i) = i
    text1 = text1 & i & "|"
Next
text1 = Left(text1, Len(text1) - 1)
MyArray = Split(text1, "|")
DataRange.RemoveDuplicates Columns:=VBA.Array(MyArray)  
我在模块中使用Option Base 1语句,MyArray由1到36的数字组成,并声明为Variant。当我将此示例修改为

DataRange.RemoveDuplicates Columns:=VBA.Array(1,2,3,4,5 etc)  

它可以工作,但它是硬编码的,看起来很糟糕。有什么建议吗

我认为您的问题在于VBA.Array(MyArray)实际上是从MyArray创建一个数组。 您只希望列来自MyArray

试一试

范围.RemovedUpplicates中列的数据类型为variant

对于选项Base 1,您必须创建一个基于零的数组,并将MyArray值传递给它

ReDim zeroarray(0 To UBound(MyArray) - 1) As Variant
For i = 0 To UBound(myarray) - 1
zeroarray(i) = myarray(i + 1)
Next i
DataRange.RemoveDuplicates Columns:=(zeroarray)

如果
MyArray
是一个数组,那么您只需执行以下操作

DataRange.RemoveDuplicates Columns:=(MyArray)
VBA采用逗号分隔的值列表作为参数

您所做的是将您的数组放入另一个数组中,而这不是
removedupplicates
所期望的

? Array(1,2,3)(0)
1

? Array(Array(1,2,3))(0)
> Type mismatch

? Array(Array(1,2,3))(0)(0)
1
编辑:作为mooseman的道具,实际上需要在MyArray周围加上括号。()

运行时错误5:过程调用或参数无效

工作


将MyArray()定义为整数您能演示一下如何填写MyArray吗?或者看看我很确定的
选项Base 1
对这一点没有任何影响。FWIW您应该保持隐式大小的数组,默认基数为
0
。请将您的问题包括在内,以便我们可以重现问题并帮助您解决问题。“目前您的问题无法回答。@peakpeak谢谢,当数组正在运行时,它会出错。”filled@Mormoch而且,您的帖子中仍然没有该代码。请确保创建了一个附加数组,但它不适用于Option Base 1语句据我所知,列:=不接受Base 1数组。你需要将它转换为一个零基数组,这似乎是通过逐个传输元素来完成的。你是对的,我声明它是基于零的,并最终按照我的设想运行。Andre,感谢你的帮助,当使用选项1时,它不起作用。我本来会从一开始就使用一个基于零的数组,但我不知道。
? Array(1,2,3)(0)
1

? Array(Array(1,2,3))(0)
> Type mismatch

? Array(Array(1,2,3))(0)(0)
1
MyArray = Array(1, 2, 3)
rng.RemoveDuplicates Columns:=MyArray
MyArray = Array(1, 2, 3)
rng.RemoveDuplicates Columns:=(MyArray)