Создать выражение Range для использования в методе Union () - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу создать выражение диапазона для использования в методе Union().

Пока у меня есть этот код:

Sub RangeExpresion()
Dim str As String, s

str = "2,10"
s = Split(str, ",")

' (1) If I do this it works. It selects rows 2 and 10
Union(Rows("" & s(0) & ""), Rows("" & s(1) & "")).Select

' (2) If I do this doesn't work. The expression is not correct. I get error
h = "Rows("" & s(0) & ""), Rows("" & s(1) & "")"
Union(h).Select

End Sub

Как видите, сначала Union()Команда, которую я использую внутри выражения Rows("" & s(0) & ""), Rows("" & s(1) & ""), принимается, и выбираются строки 2 и 10.

Во втором Union() Сначала я пытаюсь сохранить в переменной то же выражение, которое работает выше, но на этот раз яget error

аргумент не обязателен

Как бы это сделать?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы должны построить объединенный диапазон динамически, используя цикл над массивом s:

Sub RangeExpresion()
    Dim str As String
    Dim s As String
    Dim lItem As Long
    Dim rUnifiedRange As Range
    str = "2,10"
    s = Split(str, ",")
    For lItem = LBound(s) To UBound(s)
        If rUnifiedRange Is Nothing Then
            Set rUnifiedRange = Rows(s(lItem))
        Else
            Set rUnifiedRange = Union(rUnifiedRange, Rows(s(lItem)))
        End If
    Next
End Sub
0 голосов
/ 28 февраля 2019

Для объединения требуется как минимум два объекта Range, а не одна строка.

Ваша первая попытка генерирует их, поскольку строки не инкапсулированы как строковый литерал.Ваш второй нет, поэтому передается одна строка, а не два диапазона.

Объединение

Возвращает объединение двух или более диапазонов.

Синтаксическое выражение.

Союз ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9 , Arg10 , Arg11 , Arg12, Arg13 , Arg14 , Arg15 , Arg16 , Arg17 , Arg18 , Arg19 , Arg20 , Arg21 , Arg22 , Arg23 , Arg24 , Arg25 , Arg26 , Arg27 , Arg28 , Arg29 , Arg30 )

Параметры

Name    Required/Optional   Data type   Description
Arg1    Required            Range       At least two Range objects must be specified.
Arg2    Required            Range       At least two Range objects must be specified.
Arg3    Optional            Variant     A range.

Запрошенный пример:

Option Explicit
Public Sub RangeExpresion()
    Dim str As String, s, rng1 As Range, rng2 As Range

    str = "2,10"
    s = Split(str, ",")
    Set rng1 = rows("" & s(0) & "")
    Set rng2 = rows("" & s(1) & "")

    Union(rng1, rng2).Select '<==Testing only. You should avoid .Select
End Sub

Хотя комментарий jkpieterse о лучшем способе верен.Union(Rows(s(0)), Rows(s(1)))

...