【问题标题】:Invalid procedure call or argument in excel vbaexcel vba中的过程调用或参数无效
【发布时间】:2016-10-19 14:17:31
【问题描述】:

我在 sheet1 的 column1 上使用具有唯一编号的过滤器,将过滤后的值从 Z 列获取到数组 (arr) 对象中,并将这些值作为字符串粘贴到“仪表板”表的一个单元格中。对 sheet1 的第 1 列上的所有唯一值重复此过程。我收到多个错误 1. Join() 方法中的“无效的过程调用或参数”。 2. 将值放入 rng 对象和数组。我可以得到你的帮助,我在哪里出错了。非常感谢。

Dim d As Object, c As Range, k, tmp As String
Dim TestRg As Range
Dim arr() As Variant
Dim i As Integer
Dim myCell As Range
Dim rng As Range
i = 2

Set d = CreateObject("scripting.dictionary")
Columns(1).Select
For Each c In Selection
    tmp = Trim(c.Value)
    If Len(tmp) > 0 Then d(tmp) = d(tmp) + 1
Next c

For Each k In d.Keys
If IsNumeric(k) Then
 Set TestRg = Range("A1:AQ" & LastRow(ActiveSheet))
 TestRg.AutoFilter Field:=1, Criteria1:=k, Operator:=xlFilterValues
 LasRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
 Set rng = ActiveSheet.Range("Z1" & ":" & "Z" & LasRow).SpecialCells(xlCellTypeVisible)
 rng.Activate
 arr = rng.Value
Worksheets("Dashboard").Range("A" & i) = k
Worksheets("Dashboard").Range("E" & i).Resize(UBound(arr, 1)).Value = Join(arr, " ")
i = i + 1
Erase arr
End If
Next k

【问题讨论】:

  • 可能的原因是您指定的范围长度超过了您在代码上调用的数据长度。

标签: vba excel


【解决方案1】:

至于你的帖子寻求帮助的错误,它来自:

Worksheets("Dashboard").Range("E" & i).Resize(UBound(arr, 1)).Value = Join(arr, " ")

因为arr 是一个二维 维数组,而Join() 函数需要一个一维-一维

那么你应该:

  • 将 arr 声明为 简单 变体:

    Dim arr As Variant
    
  • 以某种方式填充它以生成一个一维数组

    arr = Application.Transpose(rng.Value)
    

除此之外,在我看来,您的代码还有一些问题

您可能希望先修复此错误,然后,如果这些问题实际出现并且您无法修复,请发布新帖子

【讨论】:

  • @Ram,你通过了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多