Ac: Изменение формата ячейки в Access
Вопрос следующий.
Как сделать две операции одновременно: поменять формат фокуса поля и цвет этого же поля в зависимости от значения (Программно).
У меня такой код:
With Me.ПолеДата
.FormatConditions.Delete
.FormatConditions.Add acFieldHasFocus
With .FormatConditions(0)
.FontBold = True
.BackColor = 15658734
End With
End With
With Me.ПолеДата
.FormatConditions.Delete
.FormatConditions.Add acExpression, , "[Запись]=0"
With .FormatConditions(0)
.ForeColor = RGB(0, 0, 225)
.BackColor = 15658734
End With
End With
Но последнее изменение формата удаляет предыдущее, а как записать одной строкой не знаю.
Теперь, не совсем понятно что тебе необходимо поменять: поменять формат фокуса поля - это что за зверь такой?
С ForeColor вообще не понятно откуда оно здесь, это просто цвет элемента управления, он не относится к FormatConditions. Это свойство объекта Controls. т.е. просто цвет текста по умолчанию, когда ни одно из условий форматирования не выполняется или их нет вообще для данного элемента управления.
Пока не получил ответов, могу токо предположить такую ситуацию.
Допустим есть уже одно правило условного форматирования (т.е. создан объект FormatConditions(0) ) и мы хотим программно изменить цвет текста, фона и насыщенность шрифта:
If .FormatConditions.Count > 0 Then
With .FormatConditions(0)
If bolTak_Ili_Sjk then
.FontBold = True
.FontColor = RGB(0, 0, 225)
.BackColor = 15658734
Else
.FontBold = False
.FontColor = RGB(0, 255, 0)
.BackColor = 15654439
End If
End With
End If
End With
Т.е. для того чтобы поменять свойства объекта отвечающие за вид (FontColor, BackColor, FontItalic и т.д.) достаточно им присвоить новые значения, то свойства Expression1 и Expression2 доступны только для чтения. Поэтому для изменений правил (выражения) условного форматирования необходимо использовать метод Modify (это метод именно объекта FormatConditions(0), а не коллекции FormatConditions в целом). Синтаксис этого метода такой же как и у метода Add (а это метод коллекции), токо применять его надо в отличии от Add к конкретному объекту, например FormatConditions(0):
.FormatConditions(0).Modify acExpression, , "[Запись]=0"
Кроме это можно просто удалить конкретно это условие - .FormatConditions(0).Delete и добавить новое - .FormatConditions.Add acExpression, , "[Запись]=0"
Тут у тебя выбор из двух вариантов, выбирай что удобнее.
P.S. возможно у тебя возникла путаница из-за того что существуют два немного разных метода:
1. Me.ПолеДата.FormatConditions.Delete - удаляет ВСЕ условия форматирования, т.е. полностью очищает коллекцию FormatConditions
2. Me.ПолеДата.FormatConditions(0).Delete - удаляет конкретно токо первое условие (все остальные, если они есть, смещаются вниз и нумерация меняется на единицу)
Остался вопрос: Если у меня только одно условие (FormatConditions(0). Как мне добавить еще одно.
Ведь, если я сделаю Delete, а потом Add, то добавиться только одно условие, а записать FormatConditions(1).Add нельзя
Mercy!
Остался вопрос: Если у меня только одно условие (FormatConditions(0). Как мне добавить еще одно.
Ведь, если я сделаю Delete, а потом Add, то добавиться только одно условие, а записать FormatConditions(1).Add нельзя
Тебе никто не мешает добавить два или даже 3 условия, абсолютно также как и первое, т.е. используя метод Add, но опять же повторюсь, метод Add существует и применяется только к коллекции FormatConditions (но в принципе и исходя из здравого смысла можно понять, ведь когда мы пишем FormatConditions(1).ИмяМетода мы этим метод воздействуем на сам объект, а если мы хотим добавить еще один такой же объект, то к кому следует применить метод Add... объект FormatCondition нам уже никак не поможет, надо брать выше, куда у нас входит этот объект, он входит в коллекцию FormatConditions, от объекта отличается буковкой s на конце. Если еще проще объяснять, то например так: если ты хочешь чтобы красную девятку у тебя под окном наконец помыли, ты к кому идешь - к водителю этой девятки конечно, елси ты хочешь чтобы эта машина убралась из-под твоих окон - идешь ругаться к водителю девятки, а вот если ты хочешь купить новую машину, ты к кому пойдешь - к директору магазина, завода или салона).
Например, я сразу добавляю три условия:
Me.ПолеДата.FormatConditions.Add acExpression, , "[Запись]=1"
Me.ПолеДата.FormatConditions.Add acExpression, , "[Запись]=2"
и конечно перед добавлением совершенно не обязательно делать Delete. Если тебе надо к существующему условию добавить еще одно, то зачем же что-то удалять. Delete применяют когда нужно установить новые условия, а старые вообще не нужны и к тому же возможна ситуация, что условия могли быть уже созданы ранее, тоды конечно для гарантии лучше писать так:
Me.ПолеДата.FormatConditions.Delete
' добавляем 3 новых
Me.ПолеДата.FormatConditions.Add acExpression, , "[Запись]=0"
Me.ПолеДата.FormatConditions.Add acExpression, , "[Запись]=1"
Me.ПолеДата.FormatConditions.Add acExpression, , "[Запись]=2"
Извиняюсь, если мои вопросы кажутся глупыми.
p.s. я ведь пробовала так, но только для FormatCondition (без s)
Еще раз спасибо!
Извиняюсь, если мои вопросы кажутся глупыми.
p.s. я ведь пробовала так, но только для FormatCondition (без s)
Да нет, это не страшно, тебе просто надо разобраться с понятием - коллекция в Visual Basic, поскольку принцип организации (группировки) объектов в коллекцию используется в Visual Basic повсеместно и различать соответсвенно методы коллекции и методы объектов входящих в эту коллекцию