Olá,
Veja se te ajuda:
LO Base: alterar conteúdo de campo de TableControl em sub-formulário
EDIÇÃO - 16/01/2017:
No seu arquivo .odb a coluna Custo está descartando os decimais. Para resolver é preciso ir na tabela Pedidos_Detalhes, no modo “Edição de Tabela”, colocar 2 para na caixa Casas decimais (Propriedades do campo).
O código foi atribuído ao Evento Mudança no Status do Item da coluna (Listbox). Escolhendo a abreviatura os campos “Produto” e “Custo” são preenchidos automaticamente.
Arquivo com o código: Vendas-Macro.odb
Código:
Sub ListBox_MudancaStatusItem( oEvento )
' Listbox (Coluna...) > Propriedades > Eventos > Mudança no Status do Item
Dim oSubForm As Object, ocTabela As Object, oListBox As Object
Dim oProduto As Object, oCusto As Object, oCon As Object
Dim oStat As Object, oRes As Object
Dim iPos As Integer
Dim sCodigo As String, sSQL As String
oListBox = oEvento.Source.Model
ocTabela = oListBox.Parent
oProduto = ocTabela.getByName( "Produto" )
oCusto = ocTabela.getByName( "Custo" )
oSubForm = ocTabela.Parent
iPos = oEvento.Selected 'Posição do produto selecionado
sCodigo = oListBox.ValueItemList( iPos ) 'Código do produto selecionado
'sAbrev = oListBox.StringItemList( iPos ) 'Abreviatura do produto selecionado
'Sair se produto selecionado for o mesmo que já existe no campo
If oListBox.BoundField.Value = sCodigo Then Exit Sub
'Sair se a "posição vazia" da listbox for selecionada
If iPos = 0 Then Exit Sub
sSQL = "SELECT ""Produto"", ""Custo"" FROM ""Produtos"" WHERE ""IdProduto"" = " & sCodigo
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection
oStat = oCon.CreateStatement
oRes = oStat.ExecuteQuery(sSQL)
If oRes.next Then
oProduto.BoundField.Value = oRes.getString(1)
oCusto.BoundField.Value = oRes.getString(2)
oListBox.BoundField.Value = sCodigo
IF oSubForm.isnew THEN oSubForm.insertRow() ELSE oSubForm.updateRow()
End If
End Sub
Atte,