Проблема выбора диапазона Excel - PullRequest
0 голосов
/ 23 апреля 2011

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

Sub ColorBanding()
Dim num As Integer
For i = 2 To 50
    Dim range As String
    range("A" + Str(i) + ":E" + Str(i)).Select
    If i Mod 3 = 0 Then
        Cells(1, 1).Select
        ' Yellow
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 65535
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    ElseIf i Mod 3 = 2 Then
        ' Blue
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.399975585192419
            .PatternTintAndShade = 0
        End With
    End If
    Next i
End Sub

I 'У меня возникли проблемы с этой строкой: "диапазон (" A "+ Str (i) +": E "+ Str (i)). Выберите"

Пример оценки для i = 2: выходы: "A2: E 2 "должно быть:" A2: E2 "

Техническая ошибка, которую я получаю:" Ожидается массив "

Есть ли лучший способ сделать это?И есть ли способ заставить этот способ работать правильно?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Это правильный синтаксис. Также не выбирайте и не активируйте ничего, поскольку это только замедляет работу. Какая польза от 'num'?

Sub test()
Dim num As Integer, MyRange As Range, i As Integer

For i = 2 To 50
    Set MyRange = Range("A" & i & ":E" & i)
    MsgBox MyRange.Address 'Delete this test line
    With MyRange.Cells(1, 1).Interior
     If (i Mod 3) = 0 Then
           'Yellow
           .Pattern = xlSolid
           .PatternColorIndex = xlAutomatic
           .Color = 65535
           .TintAndShade = 0
           .PatternTintAndShade = 0

     ElseIf i Mod 3 = 2 Then
           'Blue
           .Pattern = xlSolid
           .PatternColorIndex = xlAutomatic
           .ThemeColor = xlThemeColorAccent1
           .TintAndShade = 0.399975585192419
           .PatternTintAndShade = 0
    End If
    End With
Next i
End Sub
0 голосов
/ 23 апреля 2011

Проблема здесь

Dim num As Integer
For i = 2 To 50
    Dim range As String
    range("A" + Str(i) + ":E" + Str(i)).Select
    If i Mod 3 = 0 Then
    Cells(1, 1).Select
  1. Пожалуйста, поместите все затемнения в верхний
  2. диапазон затемнения в виде строки?что, где вы думаете, диапазон это диапазон.Как и в массиве ячеек на листе.
  3. range - зарезервированное слово, не используйте его в качестве имени переменной, используйте что-то вроде MyRange.
  4. Objects (например range, worksheet и т. д.) можно назначать только в операторе Set object = reference_to_other_object_of_the_same_type, см. ниже.
  5. Ячейки (1,1) относительно чего?Объект по умолчанию - ActiveWorksheet, а ActiveWorksheet.Cells(1,1) постоянно фиксируется в ячейке "A1".MyRange.Cells (1,1), с другой стороны, могут перемещаться.
  6. В VBA '&' объединяет строки, оператор '+' работает только с числами

Изменить егоto:

Dim num As Integer
Dim MyRange as Range
Dim i as Integer

For i = 2 To 50
    Set MyRange = range("A" & Str(i) & ":E" & Str(i))
    MyRange.Select
    If (i Mod 3) = 0 Then
        MyRange.Cells(1, 1).Select
   ...

Еще не тестировал код, но я уверен, что он близок.

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