variable texto solo minusculas mayusculas mayuscula macro funcion ejemplos convertir cambiar automaticamente vba ms-word

texto - solo mayusculas en textbox vba excel



La palabra VBA reemplaza el texto que aparece en la selección solo con mayúscula (2)

@PatentWookiee, creo que al principio estabas en el camino correcto con,

Selection.Range.Delete Selection.Range.InsertAfter (UCase(txt))

El problema es que, una vez que eliminas el texto seleccionado, todo lo que coloques en su lugar asumirá el formato del primer carácter antes de tu eliminación. Para resolver este problema, deberás ir con:

Option Explicit Sub ReplaceWithUppercase() Selection.Text = UCase(Selection.Text) End Sub

En lugar de reemplazar el texto real (y el formato junto con él) simplemente reemplazamos la caja de la cadena seleccionada, dejando así el formato completamente intacto. Si he leído bien tu pregunta, esto debería resolver completamente tu problema. Si no, asegúrese de avisarme, lo solucionaremos.

Mi objetivo es simple: quiero un atajo para reemplazar texto en una selección con mayúsculas, sin aplicar el estilo "AllCaps", por razones que no entraré aquí.

Lo he logrado utilizando Selection.Delete y Selection.Insert , pero eso no parece conservar los estilos de fuente no inherentes al estilo de párrafo.

Cuando intento usar VBA Selection.Find.Execute:=ReplaceAll , está reemplazando todas las instancias en todo el documento. Soy consciente de que este debería ser el comportamiento de .wrap=wdFindContinue , pero he establecido .wrap=wdFindStop . Mi mejor suposición es que como mi .text está configurado como una variable que llama al objeto Selection , de alguna manera pierde la selección al establecer .text (aunque visualmente esto no es aparente cuando paso por el código - la selección permanece resaltada), lo que resulta en .ReplaceAll ejecutando para todo el documento. Si ingreso manualmente la cadena "buscar" ( .text ) para un caso particular, se ejecuta solo en la selección (¡incluso con la variable txt llamada en el campo .Replacement.Text!), Pero obviamente eso no será práctico.

Aquí está mi código:

Option Explicit Sub ReplaceWithUppercase() Dim pasteAutoFormatSetting As Boolean Dim txt As String ''Save current user selection of whether to adjust spacing automatically when pasting: pasteAutoFormatSetting = Options.PasteAdjustWordSpacing ''Turn off auto spacing adjustment: Options.PasteAdjustWordSpacing = False txt = Selection.Range.text With Selection.Font .AllCaps = False End With ''The next two lines work but do not seem to preserve built-in font styles ''already applied to the selected text, so I wanted to instead use find/replace: ''Selection.Range.Delete ''Selection.Range.InsertAfter (UCase(txt)) With Selection.Range.Find .ClearFormatting .Replacement.ClearFormatting .text = txt .Replacement.text = UCase(txt) .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True .Execute Replace:=wdReplaceAll End With ''Return to user preference for auto apacing adjustment: Options.PasteAdjustWordSpacing = pasteAutoFormatSetting End Sub


Trabajo rápido usando una matriz para el rango de selección - y la función StrConv

Sub ChangeRangeToUCase() Const vbUpperCase = 1 '' strConv constant Dim arrCells As Variant Dim intRow As Integer Dim intCol As Integer '' Assign Range to an array arrCells = Selection For intRow = LBound(arrCells, 1) To UBound(arrCells, 1) For intCol = LBound(arrCells, 2) To UBound(arrCells, 2) arrCells(intRow, intCol) = StrConv(arrCells(intRow, intCol), vbUpperCase) Next intCol Next intRow Selection = arrCells End Sub