Страницы: 1
RSS
Ошибка в макросе: "требуется объект (vba)"
 
Подскажите пожалуйста, написала макрос, генерирует случайные числа и те ячейки в которых четные значение закрашивает цветом, ошибка "нужен объект", можете подсказать что не так и почему?
файл во вложении
Изменено: Lilo_255 - 25.05.2015 18:30:32
 
Когда первый раз обращаетесь к L1.Cells(i, j) чему равны i и j ? :)
Кому решение нужно - тот пример и рисует.
 
Пытливый,  а если так писать
Код
Sub macro()
Dim i, j As Integer
Dim sum(), r(1 To 20, 1 To 20) As Integer
i = 1
j = 20
L1.Cells(i, j).Interior.ColorIndex = 0

Не верно??
получается диапазон задаю, нет? глупо?
Изменено: Lilo_255 - 25.05.2015 17:49:20
 
Пытливый, заменила на
L1.Cells("A1:T20").Interior.ColorIndex = 0

не помогло=/
Изменено: Lilo_255 - 25.05.2015 17:43:44
 
Код
Worksheets("L1").Range("A1:T20) и дальше по тексту
Worksheets("L1").Cells(i, j).Interior.ColorIndex = 0
Изменено: Kuzmich - 25.05.2015 17:56:30
 
Сделал отдельным модулем

Код
Sub macro()
Dim i, j As Integer
Dim r(1 To 20, 1 To 20) As Variant

 'L1.Cells(i, j).Interior.ColorIndex = 0


For i = 1 To 20
 For j = 1 To 20

         r(i, j) = 10 * (Rnd()) + 1
     Cells(i, j).Value = r(i, j)

    If Cells(i, j) Mod 2 = 0 Then

Cells(i, j).Interior.ColorIndex = 5
    End If
  Next j
Next i

End Sub
Изменено: TImmy - 25.05.2015 17:53:34
 
TImmy, а почему вот это 'L1.Cells(i, j).Interior.ColorIndex = 0  в комментах, мне же нужно ну по идее очистить ячейки от заливки
 
При
Dim i, j As Integer
только j будет интегер. Впрочим на скорость не влияет... Принципа ради замечание.
 
Цитата
Lilo_255 написал: ...вот это  'L1.Cells(i, j).Interior.ColorIndex = 0   в комментах, мне же нужно ну по идее очистить ячейки от заливки
в комментах - потому что оно не работает :) и в целом строчка лишенная при Ваших запросах смысла:
1. где до этой строчки вы указывали чему равно i и j?
2. если вы укажите i и j - то макрос обесцветит только одну ячейку -> нужно делать цикл, но в Вашем случае гораздо проще выделить диапазон без цикла и его обесцветить

Для очистки можете использовать
Range(Cells(1, 1), Cells(20, 20)).Select
Изменено: TImmy - 25.05.2015 22:44:23
 
TImmy, и еще вопрос почему числа не целые генерируются,
а вот такие
8,055475235
Изменено: Lilo_255 - 25.05.2015 17:59:58
 
Код
Range(Cells(1, 1), Cells(20, 20)).Select
With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    
  Dim i, j As Integer
Dim r(1 To 20, 1 To 20) As Variant
 
 'L1.Cells(i, j).Interior.ColorIndex = 0
 For i = 1 To 20
 For j = 1 To 20
 
         r(i, j) = 10 * (Rnd()) + 1
     Cells(i, j).Value = Round(r(i, j), 0) 'убираем дробную часть
     
    If Cells(i, j) Mod 2 = 0 Then
 
Cells(i, j).Interior.ColorIndex = 5
    End If
  Next j
Next i
Изменено: TImmy - 25.05.2015 18:31:04
 
TImmy, блин мне стыдно...все ясно=) Int же=)
 
TImmy, ясно не Int=)

СПАСИБО!!
Изменено: Lilo_255 - 25.05.2015 18:25:22
 
Цитата
TImmy написал:  в Вашем случае гораздо проще выделить диапазон без цикла и его обесцветить
А зачем выделять?
 
Потому что записал рекордером :), а править и наводить красоту времени не было.
 
Вы хотите сказать, что Ваш рекордер записал такую строку? )))
Код
Range(Cells(1, 1), Cells(20, 20)).Select
 
ок, для успокоения совести:
Range(Cells(1, 1), Cells(20, 20)).Interior.Pattern = xlNone

Макро рекордером была записана очистка ячеек, код выделения диапазона был написан выше
Изменено: TImmy - 26.05.2015 11:22:13
 
:D
Страницы: 1
Читают тему
Наверх