Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ac: Изменение формата ячейки в Access

1.9K
13 января 2004 года
svetik
53 / / 01.08.2003
Помогие, пожалйста!!!

Вопрос следующий.

Как сделать две операции одновременно: поменять формат фокуса поля и цвет этого же поля в зависимости от значения (Программно).
У меня такой код:
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

Но последнее изменение формата удаляет предыдущее, а как записать одной строкой не знаю.
258
14 января 2004 года
SergeySV
1.5K / / 19.03.2003
Так, под форматом ты судя по всему понимаешь - условное форматирование, объект FormatConditions.

Теперь, не совсем понятно что тебе необходимо поменять: поменять формат фокуса поля - это что за зверь такой?
С ForeColor вообще не понятно откуда оно здесь, это просто цвет элемента управления, он не относится к FormatConditions. Это свойство объекта Controls. т.е. просто цвет текста по умолчанию, когда ни одно из условий форматирования не выполняется или их нет вообще для данного элемента управления.


Пока не получил ответов, могу токо предположить такую ситуацию.
Допустим есть уже одно правило условного форматирования (т.е. создан объект FormatConditions(0) ) и мы хотим программно изменить цвет текста, фона и насыщенность шрифта:
Код:
With Me.ПолеДата
  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 - удаляет конкретно токо первое условие (все остальные, если они есть, смещаются вниз и нумерация меняется на единицу)
1.9K
14 января 2004 года
svetik
53 / / 01.08.2003
Mercy!

Остался вопрос: Если у меня только одно условие (FormatConditions(0). Как мне добавить еще одно.
Ведь, если я сделаю Delete, а потом Add, то добавиться только одно условие, а записать FormatConditions(1).Add нельзя
258
15 января 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by svetik
Mercy!

Остался вопрос: Если у меня только одно условие (FormatConditions(0). Как мне добавить еще одно.
Ведь, если я сделаю Delete, а потом Add, то добавиться только одно условие, а записать FormatConditions(1).Add нельзя



Тебе никто не мешает добавить два или даже 3 условия, абсолютно также как и первое, т.е. используя метод Add, но опять же повторюсь, метод Add существует и применяется только к коллекции FormatConditions (но в принципе и исходя из здравого смысла можно понять, ведь когда мы пишем FormatConditions(1).ИмяМетода мы этим метод воздействуем на сам объект, а если мы хотим добавить еще один такой же объект, то к кому следует применить метод Add... объект FormatCondition нам уже никак не поможет, надо брать выше, куда у нас входит этот объект, он входит в коллекцию FormatConditions, от объекта отличается буковкой s на конце. Если еще проще объяснять, то например так: если ты хочешь чтобы красную девятку у тебя под окном наконец помыли, ты к кому идешь - к водителю этой девятки конечно, елси ты хочешь чтобы эта машина убралась из-под твоих окон - идешь ругаться к водителю девятки, а вот если ты хочешь купить новую машину, ты к кому пойдешь - к директору магазина, завода или салона).

Например, я сразу добавляю три условия:

 
Код:
Me.ПолеДата.FormatConditions.Add acExpression, , "[Запись]=0"
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"
1.9K
16 января 2004 года
svetik
53 / / 01.08.2003
Еще раз спасибо!

Извиняюсь, если мои вопросы кажутся глупыми.
p.s. я ведь пробовала так, но только для FormatCondition (без s)
258
16 января 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by svetik
Еще раз спасибо!

Извиняюсь, если мои вопросы кажутся глупыми.
p.s. я ведь пробовала так, но только для FormatCondition (без s)



Да нет, это не страшно, тебе просто надо разобраться с понятием - коллекция в Visual Basic, поскольку принцип организации (группировки) объектов в коллекцию используется в Visual Basic повсеместно и различать соответсвенно методы коллекции и методы объектов входящих в эту коллекцию

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог