我需要'RemoveDuplicates'
上特定的'Selection'
,它可以随时具有任何行/列大小。我为'Columns'
参数使用了Variant类型变量,但它正在获取'Error 5'
。我的代码有什么问题?
下面共享的代码显示了宏如何从已知的CSV文件完整路径'RutaArchivo(i)'
复制数据并将它们全部粘贴到一个唯一的工作簿'LibroTemporal(0)'
中,一个又一个的工作簿。作为一个可能相关的信息,我需要在每个粘贴过程中插入一个'TextToColumns'
过程,以便能够用正在编译的唯一数据的多少列来不断更新'Ancho'
。
'MiArray()'
和'MiArray2()'
是Variant类型变量,用于替换过程中的手动数组:'MiArray(1 To Ancho)'
用于'TextToColumns'
过程(它非常完美!),现在,在'MiArray2(1 To Ancho)'
过程中使用了'RemoveDuplicates'
(它不起作用...帮助!)。
请注意,我已省略了代码的其他部分,以避免出现不相关的信息,但是本部分将花很多时间来查找问题。不过,请随时询问您是否需要更多信息。
我知道这个问题已经被很多人提出,但是由于某种原因,它对我的案子没有任何帮助,我需要一些定制的支持。我已经在这里和其他网站上进行了一些研究,其中大多数(获得成功)以与我正在使用的解决方案(根据我的情况进行调整)相似的解决方案结束,但是我没有成功。
Dim LibroTemporal(1) As Workbook
Dim i As Integer
Dim j As Integer
Dim Ancho As Integer
Dim MiArray() As Variant
Dim MiArray2() As Variant
For i = 1 To UBound(RutaArchivo)
Workbooks.Open RutaArchivo(i)
Set LibroTemporal(1) = ActiveWorkbook
Cells(1, 1).Activate
If Cells(2, 1) <> "" Then
If Cells(1, 2) = "" Then
Range(ActiveCell, ActiveCell.Offset(ActiveCell.End(xlDown).Row - 1, 0)).Select
Else
Range(ActiveCell, ActiveCell.Offset(ActiveCell.End(xlDown).Row - 1, ActiveCell.End(xlToRight).Column - 1)).Select
End If
Selection.Copy
LibroTemporal(0).Activate
ActiveCell.PasteSpecial (xlPasteValues)
Ancho = Application.WorksheetFunction.Max(Selection.Columns.Count, 1 + Len(ActiveCell) - Len(Replace(ActiveCell, Chr(9), "")), Ancho)
If Selection.Columns.Count = 1 Then
ReDim MiArray(1 To Ancho)
ReDim MiArray2(1 To Ancho)
For j = 1 To Ancho
MiArray(j) = Array(j, 1)
MiArray2(j) = j
Next j
Selection.TextToColumns Destination:=Cells(1, 1), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=(MiArray), TrailingMinusNumbers:=True
End If
ActiveCell.Offset(Selection.Rows.Count, 0).Select
End If
Application.DisplayAlerts = False
LibroTemporal(1).Close
Application.DisplayAlerts = True
Next i
Range(ActiveCell, Cells(1, 1).Offset(0, Ancho - 1)).Select
Selection.RemoveDuplicates Columns:=(MiArray2), Header:=xlNo
我期望没有错误,并且重复删除成功,但是我得到了'Runtime Error 5: Invalid Procedure Call or Argument'
预先感谢。 AJ
答案 0 :(得分:1)
我打算将其标记为重复,但发现当前的现有答案不能解决以下事实:使用变量作为列参数时可能会出现两个问题,都导致运行时错误5。
使用数组变量时,它必须基于0。所以,你需要写
ReDim MiArray2(0 To Ancho-1)
For j = 1 To Ancho
MiArray2(j-1) = j
Next j
(不要对Myarray
有所了解,但我认为这不是问题所在)
您必须将数组放入()
中(您已经这样做了)
额外的一句话:您不需要Select
语句,只需编写
Range(ActiveCell, Cells(1, 1).Offset(0, Ancho - 1)).RemoveDuplicates _
Columns:=(MiArray2), Header:=xlNo