VBA не может назначить массив - PullRequest
0 голосов
/ 27 мая 2020

Я все еще очень новичок в VBA и не стал бы поднимать руку и говорить, что у меня это вообще хорошо получается, 99% всего, что я сделал до сих пор, было собрано из других решений, найденных здесь (в основном ) и в других местах. Я пытаюсь выбрать диапазон, а затем объединить. Звучит достаточно просто, и я просмотрел много сообщений о UDF, используя join / concat / transpose / et c.

Код, над которым я работаю в данный момент.

Sub ConcatThings()
    Dim str() As String
    Dim myRng As Range
    Set myRng = Application.Selection
    Set myRng = Application.InputBox("Select range of Stuff", "Select Stuff", "Maker of things", myRng.Address, Type:=8)

    For Each myCell In myRng
        If Len(myCell) Then
            str = Join(myCell, ",")
            ThisWorkbook.Sheets("general_report").Cells(2, 7) = str
        End If
    Next
End Sub

Я бы хотел, чтобы значения распечатывались на листе general_report в ячейке 2,7.
Когда я даю ему go, я получаю «Не могу назначить массиву» и он выделяет часть str = Join.
Что я делаю не так?

Обновление 1. Вот макет листа, с которым я работаю (все значения были извлечены из воздуха)

_| A  | B  | C  | D  | E  | 
1|Jan | 2  | Grn| OSX|Bird|
2|Mar | 4  | Blu| PC |Frog|
3|Feb | 6  | Red| OSX|Dogs|
4|Nov | 0  | Wht| And|Cats|
5|Jun | 1  | Ylw| iOS|Worm|

При запуске макроса вы должны выбрать любой столбец под вопросом, и он напечатает следующее в ячейке 2,7 Grn, Blu, Red, Wht, Ylw

1 Ответ

1 голос
/ 27 мая 2020

Как говорили другие в комментариях, это простая ситуация TEXTJOIN, хотя она осложняется вашей очевидной необходимостью не присоединяться к потенциально пустым ячейкам в выбранном диапазоне. Как упоминает @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

Обратите внимание, что присвоение Cells(2,7) выходит за пределы l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...