Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
集合的VBA联接等效项_Vba_Join_Collections_Excel - Fatal编程技术网

集合的VBA联接等效项

集合的VBA联接等效项,vba,join,collections,excel,Vba,Join,Collections,Excel,如何在VBA中加入集合。在VB.net中,我通常使用联接(…,“分隔符”)联接数组,但我不知道如何使用VBA中的集合来联接数组 Dim oColl As New Collection Dim r As Range Set r = ThisWorkbook.Sheets("Work1").Range("D13:D263") For Each cell In r If IsEmpty(cell) Then Else oColl.Add ("a = ''"

如何在VBA中加入集合。在VB.net中,我通常使用联接(…,“分隔符”)联接数组,但我不知道如何使用VBA中的集合来联接数组

Dim oColl As New Collection
Dim r As Range

Set r = ThisWorkbook.Sheets("Work1").Range("D13:D263")

For Each cell In r
     If IsEmpty(cell) Then

     Else
         oColl.Add ("a = ''" + cell.Text + "'' ")
     End If
Next

现在,我需要将所有集合值合并到一个字符串中。

我解决了自己的问题,我简单地声明了一个字符串占位符,并在为集合中添加到字符串的每个项声明了一个占位符,然后输出单个字符串占位符的结果。

解决问题后,您可以通过

  • 使用
    SpecialCells
    处理非空白单元格,而不是测试每个单元格
  • 使用变量数组而不是范围循环
  • 下面的代码使用
    Join
    将最终的字符串合并在一起。如果没有字符串操作(
    a='''''+单元格.Text+''”
    部分),则只需从步骤1开始加入特殊单元格范围即可

    更新以处理SpecialCells集合中的多个区域和单个单元格(varinats不起作用的区域)

    另一种方式:

    joinedString = "a='" & Replace(Join(Application.Transpose(Sheet1.Range("D13:D263").Value), "',a='"), ",a=''", "")
    

    你能发布你的集合的样本吗?我添加了示例集合+1以使用特殊的单元格,但我认为代码不会一直工作,你不能应用程序。如果有空格,转置一个非连续数组,那么rng1将是非连续的。@kyle很好的选择。我已经更新了这个和潜在的单单元格问题。顺便说一句,你知道吗事实上,如果它仍然在1?:)嗯,我想我有,现在肯定有:)这看起来很复杂,但我想它可以工作,我改变了我的代码,但我真的想使用集合,所以我可能会坚持使用集合。不管怎样,谢谢。我认为下面的是最简单的,我太简单了,想不出复杂的做事方法;)+我做得很聪明,使我的努力过度了。也许在最后修剪额外的值。荣誉
    joinedString = "a='" & Replace(Join(Application.Transpose(Sheet1.Range("D13:D263").Value), "',a='"), ",a=''", "")