Formatação Personalizada em campo texto

Tenho um campo texto ( 9 caracteres ) que representa o código do produto.

Atualmente o usuário digita de três em três separados por um espaço. ( ABC DEF GFR )


Pergunta valendo 25 pontos…

A maneira de Formatar a célula para se digitar os 9 caracteres seguidos e visualmente mostrar 3 grupos de 3 ?

@schiavinatto, Tem algum arquivo de exemplo para melhor entendimento?

Ola @LeandroVieira, segue uma imagem:

Descrição da imagem

A forma mais fácil seria, por exemplo:
Se o código é inserido em uma célula fixa $B$4, em A4 inserir a formula =EXT.TEXTO(B4;1;3)&" "&EXT.TEXTO(B4;4;3)&" "&EXT.TEXTO(B4;7;3), copiar e colar em B4 novamente através de uma macro se preferir, porém teria que ter um código para executar ela associada a um evento de planilha.

Ola @LeandroVieira, tinha pensado algo assim, mas automático, já que Formatação nada encontrei, nem para o Excel.

Tipo quando se digitar na coluna Código, a macro é acionada automática, por evento, ela copia o texto digitado separa e cola novamente.

Schiavinatto, o que posso fazer momentaneamente é compartilhar a macro para copiar e colar a fórmula seguindo a lógica de B4 ser utilizada para inserir o código e A4 estar livre para execução:

sub formato
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "By"
args1(0).Value = 1
args1(1).Name = "Sel"
args1(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args1())

rem fórmula
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "=EXT.TEXTO(B4;1;3)&"+CHR$(34)+" "+CHR$(34)+"&EXT.TEXTO(B4;4;3)&"+CHR$(34)+" "+CHR$(34)+"&EXT.TEXTO(B4;7;3)"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())

rem ----------------------------------------------------------------------
dim args5(1) as new com.sun.star.beans.PropertyValue
args5(0).Name = "By"
args5(0).Value = 1
args5(1).Name = "Sel"
args5(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args5())

rem colar somente texto
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVD"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args6())


end sub

Para acionar a macro automaticamente por evento, o que encontrei mais próximo foi em VBA, mas não sei adaptar ao Basic, quem poder contribuir:

Public Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False

If Target.Address = "$A$1" Then
     Select Case Target.Value
            Case 1
                    MsgBox "macro1"
            Case 2
                    MsgBox "macro2"
            Case "dd"
                    MsgBox "macro3"

     End Select

End If
Application.EnableEvents = True

End Sub

Fonte: Tomasvasquez

Ola @LeandroVieira, desta maneira não é viável, pois o uso é em uma coluna. Tentei montar a macro mas esta fora do meu nível.

Pensei o seguinte, o Evento me fornece o último digitado na coluna (até aqui consigo e gera a Variável), tenho que trabalhar esta variável para inserir os espaços e colar novamente no mesmo local.