LOCAL loActiveControl, lnColumn, loColumn WITH This loActiveControl = IIF(TYPE([.oActiveForm.ActiveControl]) = "O", .oActiveForm.ActiveControl, .NULL.) IF VARTYPE(loActiveControl) = "O" AND UPPER(loActiveControl.BaseClass) = [GRID] lnColumn = loActiveControl.ActiveColumn FOR EACH loColumn IN loActiveControl.Columns IF loColumn.ColumnOrder <> lnColumn LOOP ENDIF IF NOT (loColumn.ReadOnly AND loColumn.Bound) RETURN EVAL([loColumn.] + loColumn.CurrentControl) ENDIF EXIT ENDFOR ENDIF ENDWITH RETURN loActiveControlFor the other issue, you may want to checkout THIS_ACCESS - throw in some cases, set an oldval property - or something along those lines.