Передать в процедуру имя поля и изменить это поле!

Программирование на Visual Basic for Applications
erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Передать в процедуру имя поля и изменить это поле!

Сообщение erzhavin » 04.10.2006 (Ср) 11:53

Народ, помогите пожалуйста:
Хочется, чтобы при изменении поля на форме это поле подсвечивалось и кнопка OK менялась на SAVE!
Но нем могу передать имя изменившегося поля в процедуру! Посмотрите пожалуйста где тут затык? :oops:
Код: Выделить всё

Private Sub NMRcontactCode_AfterUpdate()
Dim FieldName As Field
FieldName = Me.NMRcontactCode.Name
OnSomeChange FieldName
End Sub

Private Sub OnSomeChange(FieldName)
EditColor = RGB(0, 0, 255)
Me.FieldName.ForeColor = EditColor
Me.Ok.Caption="Save"
End Sub

После изменения поля NMRcontactCode его цвет должен быть голубым, но программа "не видит" что конкретно нужно подсветить, так как я неправильно передаю процедуре имя поля NMRcontactCode!
А как??? Спасибо.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.10.2006 (Ср) 12:04

Код: Выделить всё
Me.Fields(FieldName).ForeColor = EditColor
Весь мир матрица, а мы в нем потоки байтов!

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Сообщение erzhavin » 04.10.2006 (Ср) 12:19

Не работает так! :cry:
Кстати, слово FieldName зарезервированное, так что пришлось поменять перменную, однако все равно не работает:
Код: Выделить всё
Private Sub NMRcontactCode_AfterUpdate()
Fname = Me.NMRcontactCode.Name
OnSomeChange Fname
End Sub

Private Sub OnSomeChange(Fname)
EditColor = RGB(0, 0, 255)
Me.Fields(Fname).ForeColor = EditColor
End Sub

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 04.10.2006 (Ср) 12:35

а так?

Код: Выделить всё
Private Sub NMRcontactCode_AfterUpdate()
  EditColor = RGB(0, 0, 255)
  Me.NMRcontactCode.ForeColor = EditColor
  Me.Ok.Caption="Save"
End Sub

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Сообщение erzhavin » 04.10.2006 (Ср) 12:46

HandKot писал(а):а так?


Так-то работает, понятно! Нужно именно передать имя поля в другую процедуру, чтобы не писать десять раз одни и те же строки.

Упращаю задачу - почему это неправильно???
Код: Выделить всё


Private Sub NMRcontactCode_AfterUpdate()
EditColor = RGB(0, 0, 255)
Fname = "NMRcontactCode"
Me.Fields(Fname).ForeColor = EditColor
End Sub

Последний раз редактировалось erzhavin 04.10.2006 (Ср) 13:16, всего редактировалось 1 раз.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Передать в процедуру имя поля и изменить это поле!

Сообщение Viper » 04.10.2006 (Ср) 13:10

по идее рабочий вариант

Код: Выделить всё

Private Sub NMRcontactCode_AfterUpdate()
Dim sFieldName As String
sFieldName = Me.NMRcontactCode.Name
OnSomeChange sFieldName
End Sub

Private Sub OnSomeChange(FieldName As String)
EditColor = RGB(0, 0, 255)
Me.Fields(sFieldName).ForeColor = EditColor
Me.Ok.Caption="Save"
End Sub


последний вариант не работает, поскольку "NMRcontactCode" не есь имя
Весь мир матрица, а мы в нем потоки байтов!

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Re: Передать в процедуру имя поля и изменить это поле!

Сообщение erzhavin » 04.10.2006 (Ср) 13:23

!Viper! писал(а):по идее рабочий вариант


Код: Выделить всё

Private Sub NMRcontactCode_AfterUpdate()
Dim sFieldName As String
sFieldName = Me.NMRcontactCode.Name
OnSomeChange sFieldName
End Sub

Private Sub OnSomeChange(sFieldName As String)
EditColor = RGB(0, 0, 255)
Me.Fields(sFieldName).ForeColor = EditColor
End Sub


Вы не поверите, но НЕ РАБОТАЕТ! Причем Access даже не показывает ошибку - просто не выполняет процедуру и все! Бред какой-то...Ничего не понимаю. :shock:

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.10.2006 (Ср) 13:40

а так

Код: Выделить всё
Private Sub NMRcontactCode_AfterUpdate()
Dim pFieldName As Field
pFieldName = Me.NMRcontactCode.Name
OnSomeChange pFieldName
End Sub

Private Sub OnSomeChange(pFieldName As Field)
EditColor = RGB(0, 0, 255)
pFieldName.ForeColor = EditColor
Me.Ok.Caption="Save"
End Sub


З.Ы. Из предыдших постов не было видно, что это Access
Весь мир матрица, а мы в нем потоки байтов!

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Сообщение erzhavin » 04.10.2006 (Ср) 13:54

!Viper! писал(а):а так

И так тоже нет! :twisted: Я не шучу... :oops:

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 04.10.2006 (Ср) 13:55

Код: Выделить всё
Private Sub OnSomeChange(nm As String)
    EditColor = RGB(0, 0, 255)
    Me.Controls(nm).ForeColor = EditColor
End Sub

???

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.10.2006 (Ср) 14:10

Больше кода в студию тогда!
Весь мир матрица, а мы в нем потоки байтов!

erzhavin
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 11.07.2005 (Пн) 13:29

Сообщение erzhavin » 04.10.2006 (Ср) 14:14

HandKot писал(а):
Код: Выделить всё
Private Sub OnSomeChange(nm As String)
    EditColor = RGB(0, 0, 255)
    Me.Controls(nm).ForeColor = EditColor
End Sub

???


Bingoooo!!! Работает! Спасибо! Непонятно почему та схема не работала... :roll:

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 04.10.2006 (Ср) 15:08

erzhavin писал(а):Bingoooo!!! Работает! Спасибо! Непонятно почему та схема не работала... :roll:
Помимо прочего, совершенно очевидно, что использовалась неверная коллекция объектов - Fields вместо Controls В будущем не забывай указывать приложение, тип объекта и его местонахождение ;-)
Привет,
KL

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.10.2006 (Ср) 16:47

Ндя... сумел автор всех запутать...
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 65

    TopList