Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2009, 20:44   #21
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Igor67 Посмотреть сообщение
И у меня код рабочий
Да я и не сомневаюсь!!! Вот плохой из меня писака, Игорь прав.
Разберемся, возьмем начало и конец макроса
Код:
Sub Macro_Tovar()
    Dim iPrices(1 To 41, 1 To 1), iRow&, iLL As Long
             For iLL = 1 To 9
    iPrices(1, 1) = "Хл. Домашний Кру"      '1 Домашний Кру
    iPrices(2, 1) = "Хл. Пшенич. Фор."      '2 Хл. Пшеничный Фор.
    iPrices(3, 1) = "Хл. Бородино     УП"   '3 Хл. Бородино
    iPrices(4, 1) = "Хл. Бородино"          '4 Хл. Бородино
    iPrices(5, 1) = "Хл. Украинский   УП"   '5 Хл. Украинский
    iPrices(6, 1) = "Хл. Украинский"        '6 Хл. Украинский
..................................................................................
    iPrices(40, 1) = "Хл. Домашний Кру"     '40 Хл. Домашний Кру
    iPrices(41, 1) = "xxxxxxxxxx"                 '41 Для резерва
             For iRow = 3 To 1623 Step 54
                With Sheets(iLL).Cells
                    .Cells(iRow, 3).Resize(41).Value = iPrices
                End With
            Next
        Next
End Sub
Задача:
Нужно вписать эти имена на 9 листах, в яч. С3 :С43 с шагом 54.
В случае, если в этих именах встретится слово УП, окрасить УП.
Т. Е. действие сразу, проверяет на УП -вписавает, проверяет на УП -вписавает + окрашивает
Ну и зачем изобретать еще макросы, если, уверен, можно все сделать тут, но я ненаю, как.
Почему, так не работает
Код:
For iRow = 3 To 543 Step 54
             With Sheets(iLL).Cells
                 .Cells(iRow, 3).Resize(41).Value = iPrices
                 p = InStr(.Cells(iRow, 3), "УП")
              If p > 0 Then
                 .Cells(iRow, 3).Characters(Start:=p, Length:=2).Font
                     .FontStyle = "bold"
                      .Color = -16776961
              End If
            End With
        Next

Последний раз редактировалось valerij; 31.10.2009 в 21:15.
valerij вне форума Ответить с цитированием
Старый 31.10.2009, 21:18   #22
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

ИМХО, пока Вы не внесете данные в ячейку, то и не сможете ее обработать.
У Вас идет групповая операция - Вы присваиваете значение массива диапазону ячеек, а вот редактировать необходимо 1 ячейку. Поэтому, возможно меня и поправят, лучше будет Вам сначала значения присвоить, а уже потом пробежаться поиском и покрасить Ваш УП
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 31.10.2009, 21:59   #23
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Igor67 Посмотреть сообщение
ИМХО, пока Вы не внесете данные в ячейку, то и не сможете ее обработать.
Да, согласен, вот так, все получилось, ошибка была, красным
Код:
For iRow = 3 To 543 Step 54
           With Sheets(iLL).Cells
          .Cells(iRow, 3).Resize(41).Value = iPrices
    End With
 Next
        For r = 3 To 43
            p = InStr(iPrices(r - 2, 1), "УП")
                If p > 0 Then
            With Cells(r, 3).Characters(Start:=p, Length:=2).Font
                .FontStyle = "bold"
                .Color = -16776961
            End With
                End If
        Next

Последний раз редактировалось valerij; 31.10.2009 в 22:41.
valerij вне форума Ответить с цитированием
Старый 01.11.2009, 13:16   #24
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

Была ошибка, вчера не досмотрел. Совпало последняя строка с нужными данными. Добавил проверку и выход из Do при отсутствии значений...

Sub TestKrasim()
Dim iSht As Worksheet
Dim iFoundRng As Range, firstAddress As String, findData As String, p As Integer

Dim iRow As Long

findData = "УП"


Application.ScreenUpdating = False

For Each iSht In ThisWorkbook.Sheets
' If iSht.Name <> iShtRplData.Name Then
With iSht
Set iFoundRng = .Columns(3).Find(What:=findData, LookIn:=xlValues, LookAt:=xlPart) 'поиск
If Not iFoundRng Is Nothing Then 'если нашли
iRow = iFoundRng.Row
p = InStr(iFoundRng, findData)

With iFoundRng.Characters(Start:=p, Length:=2).Font
.FontStyle = "bold"
.Color = -16776961
End With

Do 'цикл поиска, т.к. одно и то же значение может встречаться много раз
Set iFoundRng = .Range(.Cells(iRow + 1, 3), .Cells(.Cells(Rows.Count, 3).End(xlUp).Row, 3)).Find(What:=findData, LookIn:=xlValues, LookAt:=xlPart) 'продолжаем поиск на том же листе
If iFoundRng Is Nothing Then Exit Do 'если больше ничего нет выход из цикла
iRow = iFoundRng.Row
p = InStr(iFoundRng, findData)

With iFoundRng.Characters(Start:=p, Length:=2).Font
.FontStyle = "bold"
.Color = -16776961
End With
Loop While iRow <> .Cells(Rows.Count, 3).End(xlUp).Row
End If
End With


Next

Application.ScreenUpdating = True
MsgBox "Замена по листам проведена!", 64, "Замена"
End Sub
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Старый 01.11.2009, 16:21   #25
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Igor67 Посмотреть сообщение
Добавил проверку и выход из Do при отсутствии значений...
А теперь посмотри как я сам сделал, все работает по всем 9 листам, а полный, готовый модуль в аттаче
Код:
        With Sheets(iLL)
            For iRow = 3 To 1623 Step 54
                    .Cells(iRow, 3).Resize(41).Value = iPrices
            Next
1:      For r = 3 + m To 43 + m
                p = InStr(Cells(r, 3), "УП")
            If p > 0 Then
                With .Cells(r, 3).Characters(Start:=p, Length:=2).Font
                    .FontStyle = "bold"
                    .Color = -16776961
                End With
            End If
        Next
            If m = 1620 Then GoTo 2
                m = m + 54: GoTo 1
2: End With
Вложения
Тип файла: rar M5.rar (1.2 Кб, 5 просмотров)

Последний раз редактировалось valerij; 01.11.2009 в 16:46.
valerij вне форума Ответить с цитированием
Старый 01.11.2009, 17:58   #26
Igor67
Пользователь
 
Регистрация: 09.12.2008
Сообщений: 56
По умолчанию

Если Вас все устраивает - рад за Вас.
ИМХО самая "медленная" операция в Ехс - обращение к ячейке. Ваш вариант просто просматривает каждую ячейку из 1500, и потом выполняет действие. В этом случае Find будет будет несколько быстрее
обычно я на http://planetaexcel.ru/forum.php
Igor67 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью JavaScript изменить цвет фона ячеек в таблице,так что бы можно было выбрать цвет из списка Gotessa JavaScript, Ajax 1 09.05.2009 16:05
цвет ссылки изменить wolf950 HTML и CSS 3 16.03.2009 18:32
Изменить цвет неактивного Edit Xardas Общие вопросы Delphi 11 20.01.2008 22:38
Как изменить цвет Михаил Юрьевич Общие вопросы Delphi 5 14.01.2008 17:38
Изменить цвет при помощи макроса А. Долматов Microsoft Office Excel 5 26.09.2007 21:02