Вызов подпрограммы Excel VBA не удается - PullRequest
0 голосов
/ 07 июня 2011

У меня следующая проблема. Я хочу вызвать soubroutine для изменения цвета фона для диапазона ячеек. Диапазон ячеек вычисляется с помощью ячеек (1,1), а затем адрес рассчитывается для получения A1.

Перед вызовом подпрограммы я получаю адреса для своих ячеек следующим образом:

Range1 = cells(4, 4).Address(RowAbsolute:=False, ColumnAbsolute:=False)
Range2 = cells(4, CellAmount - 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)

Я думал, что мне это нужно, потому что подпрограмма объявлена ​​так:

Sub SetBGLightGrey(cells As String)

    range(cells).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15921906
        .TintAndShade = 0
       .PatternTintAndShade = 0
    End With

End Sub

Range 1 и Range 2 являются строками, и я согласен с объявлением диапазона:

RangeArea = """" & Range1 & ":" & Range2 & """"

Когда я вызываю свою подпрограмму так:

Call SetBGLightGrey(RangeArea)

Я получаю следующее сообщение об ошибке:

«Ошибка времени выполнения« 1004 »: сбой метода« Диапазон »объекта« _Global ». Я не понимаю этого, потому что если я вызываю подпрограмму с правильными значениями ячейки:

Call SetBGLightGrey("D4:K4")

это работает. Это строка и того же значения. Это просто не может быть, не так ли?

1 Ответ

2 голосов
/ 07 июня 2011

Вам не нужны кавычки вокруг RangeArea.

RangeArea = Range1 & ":" & Range2

Но тогда зачем вам передавать диапазоны в виде строк, а затем преобразовывать их обратно в диапазоны? Передайте объекты диапазона все время.

Sub SetBGLightGrey(byval cells as range)
  With cells.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 15921906
    .TintAndShade = 0
    .PatternTintAndShade = 0
  End With
End Sub 

SetBGLightGrey range(cells(4, 4), cells(4, CellAmount - 1))
...