2015-01-27 6 views
0

Для приведенного ниже кода диапазон, который я установил, кажется, не выходит. В основном я хочу объединить значения от A2 до A23. Мои данные поступают в ячейку A24.Excel VBA диапазон

Я назвал ячейку A24 «WrapNarrEnd», поскольку иногда я хочу добавить дополнительные строки, поэтому я хочу, чтобы «WrapNarrEnd» был постоянным. Я попытался использовать значение смещения, чтобы перейти к ячейке до «WrapNarrEnd». Все работает до второй последней строки, и я не уверен, где я ошибаюсь. Кто-нибудь может мне помочь?

Function ConcatMe(Rng As Range) As String 
    Dim cl As Range 
    ConcatMe = "" 
    For Each cl In Rng 
     ConcatMe = ConcatMe & " " & cl.Text 
    Next cl 
End Function 

Sub test2() 
    Dim WrapNarrative As Range 
    Dim WrapEnd As Range 
    Set WrapEnd = Sheets("CA Sweeps").Range("WrapNarrEnd").Offset(-1, 0) 
    **Set WrapNarrative = Sheets("CA Sweeps").Range("A2:wrapnarrend")** 
    Sheets("CA Sweeps").Range("I24").Value = ConcatMe(WrapNarrative) 
End Sub 

Пример изображения:

+0

Что вы имеете в виду, двойной звезды обозначения в коде? Удаление двойника заставляет код работать для меня, – Jeanno

+0

Извините Jeanno, я добавил в двойную звезду, чтобы указать, где я думаю, что код ломается. Когда я попытался запустить весь скрипт, я получаю «Ошибка времени выполнения» 9: «Подстрока вне диапазона». – Jackson

ответ

2

Синтаксис задания диапазона является неправильным. Вам необходимо Range(<TopLeftCell>, <BottomRightCell>)

Кроме того, ваша функция ConactMe может быть неотъемлемой.

Вот ваш код, переработан

Function ConcatMe(Rng As Range, Optional Sep As String = vbNullString) As String 
    Dim dat As Variant 

    If Rng.Columns.Count = 1 Then 
     dat = Application.Transpose(Rng.Value) 
     ConcatMe = Join(dat, Sep) 
    ElseIf Rng.Rows.Count = 1 Then 
     dat = Application.Transpose(Application.Transpose(Rng.Value)) 
     ConcatMe = Join(dat, Sep) 
    Else 
     ' what do you want to do now? 
    End If 
End Function 


Sub test2() 
    Dim WrapNarrative As Range 
    Dim WrapEnd As Range 

    With Sheets("CA Sweeps") 
     Set WrapEnd = .Range("WrapNarrEnd").Offset(-1, 0) 
     Set WrapNarrative = .Range("A2", "wrapnarrend") 
     .Range("I24").Value = ConcatMe(WrapNarrative, " ") 
    End With 
End Sub 
+0

'Set WrapNarrative = .Range (« A2 »,« wrapnarrend »)' будет работать отлично, я думаю. – L42

+0

Спасибо Крису за улучшенную конкатенацию. Я попробовал запустить весь скрипт, но получил «Ошибка времени выполнения» 9: «Подстрочный код вне диапазона». Я не уверен, что это. – Jackson

+0

@Jackson На какой линии? –