Como eu escreveria uma macro que buscaria um símbolo específico (no Excel) e o substituiria por um retorno rígido na mesma célula e manteria a integridade da célula?
Costumo converter documentos do Word em Excel e, antes da conversão, substituo todos os retornos físicos no documento do Word por cerquilhas (@@) para que a integridade da célula seja mantida na função de colar no documento do Excel (se você não fizer isso remover as devoluções definitivas, uma nova célula é criada a cada devolução).
Após colar no Excel, preciso substituir os sinais "@@" por retornos físicos e não consigo encontrar o "retorno rígido" como opção em "substituir". Acredito que uma macro é necessária para fazer isso.
Obrigado por qualquer ajuda que você possa dar.
Responder1
Na verdade, você pode fazer isso com a opção localizar e substituir.
Altere o texto da sua célula para: ="este @@ é @@ o texto da sua @@ célula @@".
Em seguida, vá para localizar e substituir e substituir @@ (ou o que você deseja substituir) por " & char(10) & ". Isso mudará sua saída de "este @@ é @@ seu texto @@ célula @@" para "este é o texto de sua célula".
Agora você precisa formatar as células para ativar a quebra de linha (clique com o botão direito > formatar > guia de alinhamento > verificar quebra de linha). Sua nova saída deve ser:
Este
é o texto
da sua
célula
Responder2
Para uma macro curta:
Sub DoubleAt()
Cells.Replace What:="@@", Replacement:=Chr(10)
End Sub
Responder3
Este foi um dos maiores sucessos no Google quando pesquisei "macro de texto do Excel com quebra automática"... então aqui está minha solução para agrupar uma célula de texto com base em uma largura:
Function hardwrap(useThis As Range, WrapAt As Integer) As String
Dim i As Integer
Dim Temp As String
Dim retVal As String
i = 0
retVal = useThis.Value
With useThis
If Len(.Value) > WrapAt Then
Temp = retVal
Do
i = i + WrapAt
Do
If Mid(Temp, i, 1) = " " Then
Temp = Left(Temp, i - 1) & Chr(10) & Right(Temp, Len(Temp) - i)
Exit Do
Else
i = i - 1
If i < 0 Then
Exit Do
End If
End If
Loop
Loop While i < Len(Temp) - WrapAt
retVal = Temp
End If
End With
hardwrap = retVal
End Function
Este código é fortemente baseado nesta função de Andrew Poulsom encontrada aqui:http://www.mrexcel.com/forum/excel-questions/424309-macro-wrap-text-hard-returns.html#post2097820
Basicamente, se a string for maior que a variável wrap at, ela avança até o ponto de wrap e marcha para trás em busca de espaços. Quando encontra um, substitui esse espaço por uma nova linha. Depois repete para o equilíbrio da corda.
Minha versão é um pouco mais genérica (IMHO).
Exemplo:
A1:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
A2:=hardwrap(A1,40)
"Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est
laborum."
Espero que ajude.