Programacion en Vba para visio problema

boqueron

Hola, a ver sialguno me puede ayudar porque me estoy volviendo loco con esto y es lo unico que me falta para poder terminar un programa de vba para trabajar sobre visio.

La cosa esta en que yo tengo varios documentos de visio, con sus shapes y demas.

he hecho un programa que tu le meter un texto y el programa te lo busca y segun la opcion que tu hayas puesto en el formulario(terminado, mal terminado, en ejecucion etc...) el programa te encuentra ese texto en las shapes y te pinta el fondo de varios colores.

Ademas el programa lo que hace es para shapes con mucho texto, te tacha con una linea el texto dentro de esa shape(el que el usuario habia escrito en el formulario ).

Todo eso me funciona correctamente. Ahora bien, tambien tengo otro boton en el Formulario que me busca el texto y me dice en que estado se encuentra esa Shape con ese texto. Tu buscas popr ejemplo ana406re por ejemplo y en la Shape que se encuentre te dice segun el color de fondo el estado de ese texto, en ejecucion, terminado, mal terminado etc...

Ahora mi problemon, cuando el texto de mi shape es muy grande, yo tacho el texto de esa shape con el sig codigo:

Dim cadenacomp As Object
Dim formas As Object
Dim celdas as object

Set celdas = pagina.Shapes

        For j = 1 To celdas.Count
            Set formas = celdas.Item(j)

Set cadenacomp = formas.Characters
cadenacomp.Begin = InStr(formas.Characters, cadena) - 1
cadenacomp.End = cadenacomp.Begin + Len(cadena) + 2
Select Case estado

        Case "TERMINADA"
                    cadenacomp.CharProps(visCharacterColor) = 0
                    cadenacomp.CharProps(visCharacterOverline) = True

Mi problema viene cuando quiero comprobar que mi texto(cadenacomp) esta subrayado, no puedo hacer un
if cadenacomp.CharProps(visCharacterOverline) = True por que me da error por que no me devuelve nada.

No se muy bien como que metodo o procedimiento usar para que me devuelva el booleano o me diga el visio que mi cadenacomp esta overline.

boqueron

Nadieee?????? :( :( :( :(

wineMan

Sorry, me mola VBA +1000, pero he tocado Excel, Outlook y Word. Nunca me ha hecho falta tocar Visio, aunque me pica la curiosidad. Lo tengo instalado. Si veo que tal en un hueco le echo un vistazo.

De todas formas, no te sorprendas. Dudo que la gente haya tocado VBA para Visio xD

Edit: Ahora que me acuerdo. Hace un mes y pico se resolvió una duda por aquí de Excel en el que había que leer texto de Excel y traducir el formato a html. Voy a mirar el código porque es muy similar a lo que pides.
Además, creo que se metieron con el chavalín que dio la solución. Le llamaron prepotente o algo así.

1 respuesta
boqueron

#3
Gracias, he conseguido descifrar algo.

Las Shapes que son las "Formas " del visio, dentro tienen varias secciones, una de ellas es la seccion characters que se supone que son del objeto characters. la cosa es que no puedo acceder a los valores del objeto. lo maximo que he conseguido sacar es la fila dentro de la Seccion characters que ocupa mi parte de texto que quiero comprobar, hay una funcion que te lo devuelve que es:

Dim cadenacomp As Object
Dim formas As Object
Dim celdas as object
dim fila as integer

Set celdas = pagina.Shapes

For j = 1 To celdas.Count
Set formas = celdas.Item(j)

Set cadenacomp = formas.Characters

fila = cadenacomp.charproprow(vischaroverline)

msgbox(fila)

En mi caso fila representa el trozo de texto que busco y en que fila se situa dentro de la seccion characters. La seccion Characters lo que hace es agrupar los caracteres segun su tipo, esto es si tienen la misma letra todos los caracteres el numero de filas es 0, por que no hay diferentes tipos de caracteres, si en cambio cojo un trozo de texto y los subrayo o lo tacho como es mi caso, el numero de filas sera 2, uno el trozo de texto sin tachar y que tienen el mismo estilo, tamaño etc.. y luego el otro por que tiene algo diferente(el estar tachado).

LA seccion es como si fuese una matriz, pero ya no se como acceder a la columna overline dentro de la seccion ("matriz") de characters.

Tengo la fila pero no hay cojones de acceder a su fila, columna. No puedo usar el characters[fila][overline]

La cabrona no se comporta como una matriz y no se como hacer referencia a ese campo (columna) en la fila que me da ese procedimiento.

PD: hay algo que veo en todas las librerias que es char.overline pero no tengo cojones a saber como usarlo, no hay ningun ejemplo en la red, me he recorrido google de arriba abajo!!! agggg

1 respuesta
wineMan

#4 este es el link del hilo: http://www.mediavida.com/foro/dev/portapapeles-office-notepad-472632

El enlace a pastebin no va. Y el archivo no lo guardé :S. Pregunta a http://www.mediavida.com/id/ier
si tiene el código que le pasé.

Pero vamos, por lo de Characters que comentas van los tiros. Lo que pasa es que había que recorrer uno a uno cada carácter para ver si estaba en negrita o no (en tu caso subrayado). Eso es así en el caso de ier porque había que aplicar etiquetas html en función de segmentos en negrita (no todo o nada negrita, sino cachos).

Ánimo, a ver si das con ello.

1 1 respuesta
boqueron

#5 Ya estaaaaaaaaaaa oeoeoe, al final lo he sacado despues de darle vueltas a todo, su puta madreeeeeeeeeeeeeeeee.

el codigo es este :

fila = cadenacompro.CharPropsRow(visCharacterOverline)
Set celdicaover = formass.CellsSRC(visSectionCharacter, fila, visCharacterOverline)
MsgBox celdicaover.FormulaU

fila toma el valor de la fila en la seccion(matriz) de characteres

ahora creo un objeto de tipo celda, que toma el valor del objeto celda situado en la matriz de caracteres con la funcion CellsSRC(visSectionCharacter, fila, visCharacterOverline)

donde:

                        visSectionCharacter (Es la referencia a seccion characters)
                        fila(es la fila que tiene nuestro trozo de texto en matriz characters)
                        visCharacterOverline( es la columna en la matriz characters)

MsgBox celdicaover.FormulaU nos da el valor de esa celda.

Por fin, que puto lio es esto del visio, entre objeto Shape, objeto cell, objeto character...

En resumen el problema estaba que tenia que asignar un objeto Cell a la posicion de la matriz, cada posicion de la matriz de characters es un objeto cell, y a partir de ahi ya se puede sacar todo pffffffffffffffffffffffffffffffff

2
wineMan

congratz!

Usuarios habituales

  • wineMan
  • boqueron