Во-превых, не понятно, что Вы подразумеваете под сводной таблицей. Перекрестный запрос? Тогда не понятно, как он используется в формах. Ведь перекрестный запрос возвращает неизвестное количество полей (столбцов), а форма отобразает только определенные.
Во-вторых что значит: "в сводной таблице со свободными строками и столбцами"?
как программно определить какой элемент сводной таблицы в форме Access был выбран до потери фокуса
Screen.PreviousControl
Screen.PreviousControl.SetFocus - перемещает фокус обратно к нему.
Я так понимаю Вы на фору поместили кнопку, чтобы нажимая ее открывать другое окно. А можно еще вместо кномки обработать событие "Двойное нажатие кнопки" на нужном поле. Правда для каждого поля прийдется делать по обработчику, но зато проблема решается сама собой. Например стоим в таблице в поле X на значении 17. Делаем по 17 двойной щелчок, фокус остается на месте, но срабатывает наш обработчик, который открывает форму для редактирования таблицы T, но только для тех записей, где X=17.
DoCmd.OpenForm "Form_T", , , "X=" & Me.X.Value, , acDialog
Может есть еще интересные обходные варианты
Часто, то что вы хотите можно сделать с помощью подчиненных форм. Например, в области данных ленточной формы отображается, агрегированная информация по таблице T, а в примечание формы помещаем подчиненную форму для T. (Тут Access может нас обругать и сказать что на ленточную форму нельзя класть подчиненную - НЕ ВЕРЬТЕ. В заголовок и примечание можно. Надо только выслушав всю ругань вернуть обратно режим "Ленточная".)
В этом случае конечно связывание главной и подчиненной возможно только по одному набору полей, а не по разным в зависиммости от текущей колонки, но, если подумать на смену фокуса можно написать обработчики, которые будут пересвязывать подчиненную форму с главной по разному, в зависимости от того куда прыгнул курсор.
Еще я как-то раз такой браузер (табличку, через которую осуществляется просмотр) запихал в одну подчиненную форму, а таблицу для редактирования - в другую подчиненную. Обе лежали на свободной (не связанной с наборами данных) форме. Это мне дало возможность поместить браузер слева от основного простанства, где редактировались данные. На событие OnNewRecord браузер обращался к главной форме, в которой сидел, затем к другой подчиненной форме и выполнял там фильтрацию. Получилось неплохо.