A partir da descrição do seu problema, parece que as coisas funcionam da maneira desejada quando você clica em "ok" no formulário do usuário, mas não quando você altera um produto do controle de formulário do usuário. Isso ocorre porque sua função de evento "Sub cboProduct_Change ()" está vazia. Se você quiser que o evento de alteração tenha o mesmo efeito que "ok", você pode chamar o cmdOK_click () ou criar uma terceira função de atualização mais genérica que tanto a mudança quanto a chamada de eventos ok.
Você não menciona como a coluna D é preenchida. Parece que a planilha tem fórmulas pré-preenchidas lá. Pode ser mais confiável adicionar novamente a fórmula da coluna D durante esse evento OK.
Além disso, você pode simplificar algum código sem mover a célula ativa. Por exemplo, em vez de:
Range("C20").Select
ActiveCell.Offset(1, 0) = txtAmount.Value
Você pode fazer isso:
Range("C20").Offset(1, 0) = txtAmount.Value