Macros Palabras en Negro y Concatenar

No entiendo nada de Macros, lo poco que se es por la grabadora y gracias a la ayuda de aquí, mi archivo funciona al 99% la macro ya esta en el Excel y hace casi todo lo que quiero, mi problema es que el texto que se concatena de la celda AH28, o sea >> Programa de Primas al Desempeño del Personal Académico de Tiempo Completo (PRIDE). << No se pone en negro, ya que la macro, por lo que entiendo, se ponen las palabras antes y después de lo que quiero se ponga en negro, aquí el problema es que ya no hay palabras después del "(PRIDE)." y si pongo en la macro el "." me detecta un punto que hay al principio del texto en el primer renglón y me pinta las letras de forma extraña, necesito de su ayuda para saber como configurar esa parte de la macro para que me pinte ese texto de negro.

2 respuestas

Respuesta
2

Además del código, puedes poner una imagen mostrando las celdas de cómo quieres las palabras en "Negro".

Así queda, solo falta que me pinte el Programa de Primas... bla bla

Para saber dónde iniciar a poner Negritas. En esta línea tienes el inicio:

Ar1 = Array("por la ", "en el cual ", " al ", "el día ", " al ")

Para saber dónde Finalizar poner Negritas. En esta línea tienes el final:

ar2 = Array("en el", "para", ", el cual", "del presente", ".")

Bueno, pero eso ya lo sabías.

En el primer arreglo el inicio es: " al " y su fin en el segundo arreglo es " el cual ".

Pero en tu texto no existe esa pareja, por eso no pinta de negro.

Lo que hice fue agregar otro " al " y su pareja el "."


Además, debes iniciar la búsqueda donde terminaste la anterior, es decir, buscas: " por la ", si la encuentras, ya no debes hacer la siguiente búsqueda iniciando en 1:

ini = InStr(1, txt, ar1(j), vbTextCompare) + Len(ar1(j))

Ahora inicias, donde encontraste la primera frase mas donde encontraste la segunda frase:

ini = InStr(tot, txt, ar1(j), vbTextCompare) + Len(ar1(j))

Así quedaría el código actualizado:

Sub PonerNegritas()
  Dim ini As Long, fin As Long, j As Long, tot As Long
  Dim txt As String
  Dim ar1 As Variant, ar2 As Variant
  '
  ar1 = Array("por la ", "en el cual ", " al ", "el día ", " al ")
  ar2 = Array("en el", "para", ", el cual", "del presente", ".")
  txt = Range("A17").Value
  tot = 1
  Range("A17").Font.Bold = False
  For j = 0 To UBound(ar1)
    ini = InStr(tot, txt, ar1(j), vbTextCompare) + Len(ar1(j))
    fin = InStr(ini, txt, ar2(j)) - ini
    If ini > 0 And fin > 0 Then
      Range("A17").Characters(Start:=ini, Length:=fin).Font.FontStyle = "Negrita"
      tot = ini + fin
    End If
  Next j
End Sub

Resultado:

Respuesta

Coloca tu macro para que te podamos ayudar

Sub PonerNegritas()
Dim ini As Long, fin As Long, i As Long, j As Long
Dim txt As String
Dim ar1 As Variant, ar2 As Variant
'
ar1 = Array("por la ", "en el cual ", " al ", "el día ")
ar2 = Array("en el", "para", ", el cual", "del presente")
txt = Range("A17").Value
For j = 0 To UBound(ar1)
ini = 0
fin = 0
ini = InStr(1, txt, ar1(j), vbTextCompare) + Len(ar1(j))
For i = ini To Len(txt)
If Mid(txt, i, Len(ar2(j))) = ar2(j) Then
fin = i - ini
Exit For
End If
Next
If ini > 0 And fin > 0 Then
Range("A17").Characters(Start:=ini, Length:=fin).Font.FontStyle = "Negrita"
End If
Next
End Sub

Esa es la macro, el archivo genera 2 textos distintos por eso hay mas palabras, el texto con el que tengo problemas es este: 

Me permito informarle que el H. Consejo Técnico de esta Facultad, en su Sesión Ordinaria del 10 de febrero del año en curso, con el Acuerdo No. 21/02-SO-11.2 ratificó el dictamen emitido por la Comisión Evaluadora del Área de las Ciencias Fisicomatemáticas y las Ingenierías en el cual le asignan el Nivel `C´ y lo proponen al Nivel `D´ para la renovación al Programa de Primas al Desempeño del Personal Académico de Tiempo Completo (PRIDE).

Ejecuté tu macro y obtuve el siguiente resultado:

Pero que esperas que haga la macro para que podamos orientarte en donde deberías ajustar

Salu2

Que también se ponga en negrita el texto >> Programa de Primas al Desempeño del Personal Académico de Tiempo Completo (PRIDE). <<

El 'problema' que tiene ese código es que cuando encuentra 'para' en la instrucción

If Mid(txt, i, Len(ar2(j))) = ar2(j) Then

le asigna a la variable fin el valor 81 (para ese texto) y el programa termina poniendo en negrita lo que ves, ya que luego sale del código y comienza a buscar la siguiente frase del ar1 ("en el cual") y todas las frases que siguen de ar1 ya no las encuentra por lo que luego de poner en negrita esa frase, la variable ini queda siempre en 0.

La verdad que ese código es bastante complicado, tal vez sería mejor que expliques directamente lo que necesitas y ver si se puede acomodar el código. El otro tema es que en la variable ar2 tienes palabras bastante comunes que es muy probable que las encuentre y por eso el algoritmo termine antes de lo que piensas

La pregunta no admite más respuestas

Más respuestas relacionadas