Desculpe amigo, mas o ControlSource é para indicar o nome de um campo ou expressão que por sua vez irá retornar um valor.
O seu exemplo é equivalente a: Me!txtEmpresa=Me![cmbEmpresa].Column(0)
Você está usando uma expressão que devolve um texto, por isso mais vale colocá-lo directamente no valor da TextBox.
Quanto ao seu problema em que ao abrir de novo perde o valor, veja bem:
Num arquivo Access pode existir uma base de dados onde os dados são guardados automaticamente, e também pode existir uma aplicação que irá manipular esse dados, cuja gravação é dependente do programador, a qual em sua normal utilização não
deverá ser gravada(alterada).
O que você deve e pode é utilizar o Evento load para carregar esse valor no TextBox, ou criar uma função que retorne esse valor e coloca-la como expressão no CotrolSource da TextBox.