Как извлечь диапазон из ячейки (где ячейка содержит значение диапазона) - PullRequest
0 голосов
/ 05 сентября 2018

Я в основном использую сценарий, разработанный кем-то другим, который рисует стрелки на листе Excel между различными точками. В моей электронной таблице есть данные, в которых показаны ячейки, которые необходимо связать, и я пытаюсь вызвать значение этих ячеек в вызове скрипта макроса, который я использую, и запустить его как цикл, чтобы он создавал все нужные мне стрелки

Это происходит каждый раз, когда я добавляю .value. Я пробовал разные способы решения подобных проблем, но ни один из них не делал в точности то, что я спрашиваю, поэтому я не растерялся

сохраненное значение диапазона, которое я пытаюсь извлечь, выглядит примерно так: $ B $ 5.

Private Sub CommandButton1_Click()
Dim rng As Range, cell As Range, rngstart As Range, rngend As Range

Set rng = Range("E5:E100")
    For Each cell In rng
        If cell.Value = "Yes" Then
            cell.Select
            Set rngstart = Range("K" & (ActiveCell.Row)).Value
            Set rngend = Range("H" & (ActiveCell.Row)).Value
            Call DrawArrows(Range(rngstart), Range(rngend), RGB(0, 0, 255), "Single")
        End If
    Next cell
End Sub

исходный код для вызова скрипта до этого выглядел так

Call DrawArrows(Range("b1"), Range("c4"), RGB(0, 0, 255), "Double")

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Строка Set rngstart = Range("K" & (ActiveCell.Row)).Value присваивает .Value, сохраненный в столбце K, строка ActiveCell.Row, переменной Range rngstart. Вы хотите присвоить range для передачи.

Делая быстрое "кодирование по воздуху", что-то вроде этого должно работать:

Set rngstart = ActiveSheet.Range("K" & (ActiveCell.Row))

Примечание: я указал ActiveSheet, потому что на это указывает безоговорочный Range - по крайней мере, так явно. Кроме того, это может легко сломаться, если кто-то нажмет на другой лист, или кнопка находится на листе, отличном от того, на котором вы хотите получить адрес ячейки.

0 голосов
/ 05 сентября 2018

Вы используете rngstart и rngend, как если бы они были строками в вашем вызове DrawArrows ...

        Call DrawArrows(Range(rngstart), Range(rngend), RGB(0, 0, 255), "Single")

... но вы рассматриваете их как объекты здесь:

        Set rngstart = Range("K" & (ActiveCell.Row)).Value
        Set rngend = Range("H" & (ActiveCell.Row)).Value

Это должна быть ошибка времени выполнения 424, потому что вы извлекаете Variant (который на основе вашего вопроса является подтипом String) и пытаетесь присвоить его переменной, объявленной как Range.

Private Sub CommandButton1_Click()
    Dim rng As Range, cell As Range

    With Sheet1 '<-- you should be explicitly referencing a worksheet. replace as required.
        Set rng = .Range("E5:E100")
        For Each cell In rng
            If cell.Value = "Yes" Then
                Dim rngstart As String, rngend As String
                rngstart = .Cells(cell.Row, 11).Text
                rngend = .Cells(cell.Row, 8).Text
                'ditto with the explicit reference.
                Call DrawArrows(.Range(rngstart), .Range(rngend), RGB(0, 0, 255), "Single")
            End If
        Next cell
    End With
End Sub
...