Excel VBA无法指定给数组

Excel VBA无法指定给数组,excel,vba,Excel,Vba,我对VBA仍然很陌生,不会举手说我在这方面很在行,到目前为止,我所做的99%的东西都是从这里(大部分)和其他地方找到的其他解决方案中拼凑而成的。我正在尝试选择一个范围,然后连接。听起来很简单,我已经浏览了很多关于UDF的帖子,使用了join/concat/transpose/等等 我目前正在使用的代码 Sub-ConcatThings() Dim str()作为字符串 暗myRng As范围 设置myRng=Application.Selection 设置myRng=Application.In

我对VBA仍然很陌生,不会举手说我在这方面很在行,到目前为止,我所做的99%的东西都是从这里(大部分)和其他地方找到的其他解决方案中拼凑而成的。我正在尝试选择一个范围,然后连接。听起来很简单,我已经浏览了很多关于UDF的帖子,使用了join/concat/transpose/等等

我目前正在使用的代码

Sub-ConcatThings()
Dim str()作为字符串
暗myRng As范围
设置myRng=Application.Selection
设置myRng=Application.InputBox(“选择物品范围”、“选择物品”、“物品制造者”),myRng.Address,Type:=8)
对于myRng中的每个迈塞尔
如果莱恩(迈塞尔)那么
str=Join(myCell,“,”)
此工作簿。工作表(“一般报告”)。单元格(2,7)=str
如果结束
下一个
端接头
我希望将这些值打印到单元格2,7中的常规报告表中。
当我试一试时,我得到一个“不能分配给数组”,它突出显示了
str=Join
部分。
我做错了什么

更新1- 这是我正在使用的工作表的一个模型(所有值都是从空气中提取出来的)


当您运行宏时,您将选择任何有问题的列,它将在单元格2,7 Grn、Blu、Red、Wht、Ylw中打印以下内容,虽然这是复杂的,因为您显然需要不加入选定范围内的潜在空白单元格。正如@JvdV所提到的,使用
SpecialCells
是解决这一复杂问题的一种方法,或者您可以更天真地执行以下操作:

Sub ConcatThings()
    Dim str() As String
    Dim n As Long
    Dim myRng As Range, myCell As Range

    Set myRng = Selection
    Set myRng = Application.InputBox("Select range of Stuff", "Select Stuff", myRng.Address, Type:=8)

    ReDim str(1 To myRng.Cells.count)

    For Each myCell In myRng
        If Len(myCell.Value) > 0 Then
            n = n + 1
            str(n) = myCell.Value 
        End If
    Next myCell
    ReDim Preserve str(1 To n)
    ThisWorkbook.Sheets("general_report").Cells(2, 7).Value = Join(str, ",")
End Sub

请注意,对
单元格(2,7)
的赋值超出了循环。

Join
返回的是
字符串,而不是字符串数组。。。。但我建议大家看看这一点,看看已经存在的实现您想要的功能的方法。
Join(myCell,“,”)
应该做什么?将内容合并到一个单元格中没有明显的意义。@John,据我所知,我在输入框中选择的所有单元格中循环,用“,”连接内容字符,然后将其添加到单元格2、7。似乎您不想在
Set myRng
处返回
Range
对象,而是返回一个值数组。然后,可以使用
Join()
连接该变量。请参阅Ben提供的链接,您甚至可以加入
SpecialCells
,以防止在非空单元格上循环。您有什么版本的Excel?非常感谢您的帮助。你的答案有效。如果你不介意的话,我想多了解一点。你能详述两条评论吗?第一,“显然不需要在所选范围内加入可能空白的单元格,这使问题变得复杂”,因为我不确定我在原始代码中暗示了这一点?第二,“您的输入框格式不正确”它的格式不正确到底是什么?我看到的大部分内容是可选的,我读到@DevNull-检查参数<代码>“制造者”<代码>似乎在错误的地方。@ BigBen,我认为你是正确的,我不应该在那里输入数据,以便在绘制时填充“空白文本框”。
Sub ConcatThings()
    Dim str() As String
    Dim n As Long
    Dim myRng As Range, myCell As Range

    Set myRng = Selection
    Set myRng = Application.InputBox("Select range of Stuff", "Select Stuff", myRng.Address, Type:=8)

    ReDim str(1 To myRng.Cells.count)

    For Each myCell In myRng
        If Len(myCell.Value) > 0 Then
            n = n + 1
            str(n) = myCell.Value 
        End If
    Next myCell
    ReDim Preserve str(1 To n)
    ThisWorkbook.Sheets("general_report").Cells(2, 7).Value = Join(str, ",")
End Sub