excel - RemoveDuplicates 检索错误 5:在“列”参数上使用变量时,过程调用或参数无效
问题描述
我需要'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'
提前致谢。阿杰
解决方案
我正要将此标记为重复,但发现当前现有的答案并没有解决使用变量作为列参数时可能存在两个问题的事实,这两个问题都会导致运行时错误 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
推荐阅读
- three.js - 如何将 THREE.Sprite 的比例设置为以像素为单位的宽度?
- javascript - removeChild() 函数应该只删除 Javascript 中的 appendChild() 函数条目
- javascript - 带有 codeigniter 3 的图表栏
- java - 使用 JAVA 创建一个空的 json 字段
- ruby - ruby net/http:如何修复 HTTPS POST 请求上的 EOFError
- django - 测试 Django Rest Framework 时如何为自定义用户反转路径
- java - 我无法使用 Spring Security 登录
- c# - 我可以使用 Outlook OOM 将成员添加到 Outlook.DistListItem 作为联系人而不是一次性成员吗?
- python - 如何在 Python 中正确添加文本分隔符
- java - 如何在我的应用程序可执行 jar 文件中增加 JVM 堆大小?项目类型为 Maven 项目