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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.06.2008, 08:34   #1
Graveyard
 
Регистрация: 16.06.2008
Сообщений: 5
По умолчанию Несколько вопросов по VBA

Доброго времени суток!

Задача стоит в следующем: есть Excel документ, в первом столбце на ячейках есть выбор определенных значения (занят/не занят/отсутствует), необходимо что бы при выборе какого либо значения соответсвующая строчка перекрашивалась в определенный цвет.

Проблема заключаеться в том что я не знаю двух моментов:
1. Как автоматически выполнить код ТОЛЬКО для строки в которой поставили/изменили значение первой ячейки.
2. И каким образом в функцию покраски строки передать номер строки в первом столбце

Заранее благодарю за ответы
Graveyard вне форума
Старый 16.06.2008, 10:02   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В модуль нужного листа вставьте код, выполняемый по событию изменения значения требуемых ячеек. Например:
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column = 1 Then
        '
        'Ваш код при изменении значения в столбце "A"
        '
        'Target.Row - номер строки в которой произошло изменение
    End If
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 16.06.2008, 11:28   #3
Graveyard
 
Регистрация: 16.06.2008
Сообщений: 5
По умолчанию

Благодарю!
Но т.к. я откровенно фиговый программист то код получился малясь избыточным
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim z As Integer
If Worksheets("Нива").Cells(Target.Row, 1).Value = "продана" Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 1
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "резерв" Then
For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 6
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "удо" Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 7
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "транзит " Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 8
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "стоянка " Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 9
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "т/р" Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 10
    Next z
End If
End Sub
И меня интересует два момента:
1. Можно ли как либо этот кусок
Код:
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 10
    Next z
Организовать в виде функции
2. Как можно избавиться от привязки к названию листа
Graveyard вне форума
Старый 16.06.2008, 11:28   #4
Graveyard
 
Регистрация: 16.06.2008
Сообщений: 5
По умолчанию

Благодарю!
Но т.к. я откровенно фиговый программист то код получился малясь избыточным
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim z As Integer
If Worksheets("Нива").Cells(Target.Row, 1).Value = "продана" Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 1
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "резерв" Then
For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 6
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "удо" Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 7
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "транзит " Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 8
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "стоянка " Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 9
    Next z
ElseIf Worksheets("Нива").Cells(Target.Row, 1).Value = "т/р" Then
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 10
    Next z
End If
End Sub
И меня интересует два момента:
1. Можно ли как либо этот кусок
Код:
    For z = 2 To 10
    Worksheets("Нива").Cells(Target.Row, z).Interior.ColorIndex = 10
    Next z
Организовать в виде функции
2. Как можно избавиться от привязки к названию листа
Graveyard вне форума
Старый 16.06.2008, 12:39   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если этот код находится в модуле нужного листа, то ссылку на лист делать нет необходимости. Т.е. примерно так:
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    If Target.Column = 1 Then
        Select Case Cells(Target.Row, 1)
            Case "продана"
                Range(Cells(Target.Row, 2), Cells(Target.Row, 10)).Interior.ColorIndex = 1
            Case "резерв"
                Range(Cells(Target.Row, 2), Cells(Target.Row, 10)).Interior.ColorIndex = 6
            Case "удо"
                Range(Cells(Target.Row, 2), Cells(Target.Row, 10)).Interior.ColorIndex = 7
            Case "транзит "
                Range(Cells(Target.Row, 2), Cells(Target.Row, 10)).Interior.ColorIndex = 8
            Case "стоянка "
                Range(Cells(Target.Row, 2), Cells(Target.Row, 10)).Interior.ColorIndex = 9
            Case "т/р"
                Range(Cells(Target.Row, 2), Cells(Target.Row, 10)).Interior.ColorIndex = 10
        End Select
    End If
    
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 17.06.2008, 07:43   #6
Graveyard
 
Регистрация: 16.06.2008
Сообщений: 5
По умолчанию

Еще раз благодарю за ответ, извините за дабл пост =)
Graveyard вне форума
Старый 27.08.2008, 08:50   #7
Graveyard
 
Регистрация: 16.06.2008
Сообщений: 5
По умолчанию

Еще раз доброго времени суток!
У меня есть новый вопрос:
Что есть: Excel документ-таблица с несколькими листами, на каждом листе кроме двух второй столбец является датой. Требуеться что бы при прошествии 30 дней цвет ячейки поменялся на другой. Макрос отрабатывает только при октрытии.
Вопросы:
1. Можно ли написать единый код для нескольких страниц в Auto_open и как это сделать
2. Все это ЖЕЛАТЕЛЬНО, но не обязательно согласовать, с кодом выше

Насколько я понял надо делать что то типа:
Private Sub Workbook_Open()
Dim m As Date
Dim z As Date
Dim x As Date
m = Date
z = Worksheets("Лсит1").Cells(12, 2).Value - береться дата
x = m - z - высчитывается разница
If x > 30 Then
Worksheets("Лист1").Cells(1, 1).Interior.ColorIndex = 10
Else
Worksheets("Лист1").Cells(1, 2).Interior.ColorIndex = 0
End If
End Sub

Если можно реализовать с меньшими затратами, буду рад поправкам. Заранее благодарю за ответы!
Graveyard вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько вопросов Зубоскалик Общие вопросы Delphi 14 20.11.2008 14:28
Код и несколько вопросов artemavd Общие вопросы Delphi 18 20.08.2008 10:51
несколько вопросов по RichEdit TaTT DoGG Компоненты Delphi 4 27.05.2008 10:57
Несколько Вопросов Дорст Общие вопросы Delphi 3 12.11.2007 09:18
Несколько вопросов по Delphi 2005 Nez Общие вопросы Delphi 53 21.02.2007 05:49