VBA:组合范围并加入字符串

时间:2017-11-05 19:49:48

标签: vba excel-vba excel-vba-mac excel

我正在尝试合并两个范围,然后将完整的术语列表作为逗号分隔列表加入。

两个范围都是术语列表:即ManualTags是A1:A5tag1, tag2, tag3,依此类推。动态代码是同一种类型的列表,但只是不同的单词,位于B1:B10

所以我这样称呼它:SEARCHFORTAGS(A1:A5, B1:B10)

这有效:

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range)
    SEARCHFORTAGS = Join(Application.Transpose(ManualTags.Value), ", ")
End Function

并返回:"tag1, tag2, tag3, etc"

但是当我尝试首先组合两种类型的标签然后将它们组合起来时,它会失败。

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range)
    joinedTags = Union(ManualTags, DynamicTags)
    SEARCHFORTAGS = Join(Application.Transpose(joinedTags.Value), ", ")
End Function

返回#VALUE!

我在哪里错了?

1 个答案:

答案 0 :(得分:1)

Transpose方法失败,错误1004"无法获取WorksheetFunction类的转置属性"当传递多区域范围时。

多区域范围由Union方法生成。在行joinedTags = Union(ManualTags, DynamicTags)下面添加的以下代码将遍历Areas集合并在调试窗口中显示每个项目的地址:

Dim unionArea As Excel.Range
For Each unionArea In joinedTags.Areas
    Debug.Print unionArea.Address
Next

在你的情况下,只要作为参数传递的每个范围是单区域并且只有一列,这个函数就可以工作:

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range)
    SEARCHFORTAGS = Join(Application.Transpose(ManualTags.Value), ", ") & ", " & Join(Application.Transpose(DynamicTags.Value), ", ")
End Function