Cambiar grupos de puntos por un campo de formulario

05/09/2008 - 02:49 por speichre | Informe spam
Hola a todos

Tengo varios documentos de Word de muchas páginas con zonas (son algo
parecido a contratos pero de una ONG con la que colaboro)
con ... donde la persona tiene que poner su nombre, dirección,
etc. el caso es que quería cambiarlos por un formulario de Word donde
sea más fácil de rellenar ya que bloqueo el texto y la persona vía
tabulador y ratón puede ir saltando de un campo a otro. La pregunta es
si hay alguna manera de automatizar el proceso y quizá vía macros o
VBA de tal manera que busque los puntos (a veces hay 4, 5, 6...) y los
sustituya por un espacio de campo de formulario de Word.
Gracias por cualquier pista, llevo más de un mes dándole vueltas!!!

Preguntas similare

Leer las respuestas

#6 Monica May
10/09/2008 - 00:56 | Informe spam
quedando asip >>

Sub my_macro()

With Selection.Find
.Text = ".{5,}"
.MatchWildcards = True
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
Do While .Execute
Selection.FormFields.Add Range:=Selection.Range, _
Type:=wdFieldFormTextInput
Loop
End With
Selection.HomeKey
End Sub



Comentanos...!!

Saludos
monica
Respuesta Responder a este mensaje
#7 speichre
10/09/2008 - 17:36 | Informe spam
Hola Mónica

La máscara de .{4,} -y la de 5- creo que ya las había probado sin
éxito porque (sin macro pero vía botones del Word 2003) me daba un
mensaje de error. He probado el código:

Sub MonicaV2()

With Selection.Find
.Text = "…"
.Replacement.Text = "..."
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll


With Selection.Find
.Text = ".{4,}"
.MatchWildcards = True
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
Do While .Execute
Selection.FormFields.Add Range:=Selection.Range, _
Type:=wdFieldFormTextInput
Loop
End With
Selection.HomeKey
End Sub

y el

Sub MonicaV2()

With Selection.Find
.Text = "…"
.Replacement.Text = "..."
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll


With Selection.Find
.Text = ".{4,}." ' aquí está la diferencia con respecto al código
anterior
.MatchWildcards = True
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
Do While .Execute
Selection.FormFields.Add Range:=Selection.Range, _
Type:=wdFieldFormTextInput
Loop
End With
Selection.HomeKey
End Sub

y me da error justo por el .Text. Es es error 5560 en tiempo de
ejecución (y se para en el Do While .Execute) "El cuadro del texto
Buscar contiene una expresión que no es válida". ¿A ti te funciona? en
la doc del Word teóricamente sí que viene lo de .{4,}. pero a mí no me
va
Saludos y, de nuevo, gracias
Respuesta Responder a este mensaje
#8 Monica May
10/09/2008 - 18:43 | Informe spam
Holas!

Bien te da error porque tu separador de listas es el [ ; ] y yo utilizo [
, ] pruebalo asi >>

.Text =".{4;}"

a mi me funciona porque tengo la configuracion [EEUU] :P !! es mas comoda
y mejor para muchas de las funciones se emplean con Office :-) !!


Prueba a ver quitando la [ , ] y poniendole el [ ; ]

Comentanos...!!

Saludos
Monica



Consulta
La mascara de .{4,} -y la de 5- creo que ya las había probado sin
exito porque (sin macro pero via botones del Word 2003) me daba un
mensaje de error. He probado el código:

Sub MonicaV2()

With Selection.Find
.Text = "…"
.Replacement.Text = "..."
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll


With Selection.Find
.Text = ".{4,}"
.MatchWildcards = True
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
Do While .Execute
Selection.FormFields.Add Range:=Selection.Range, _
Type:=wdFieldFormTextInput
Loop
End With
Selection.HomeKey
End Sub

y el

Sub MonicaV2()

With Selection.Find
.Text = "…"
.Replacement.Text = "..."
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll


With Selection.Find
.Text = ".{4,}." ' aquí está la diferencia con respecto al código
anterior
.MatchWildcards = True
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
Do While .Execute
Selection.FormFields.Add Range:=Selection.Range, _
Type:=wdFieldFormTextInput
Loop
End With
Selection.HomeKey
End Sub

y me da error justo por el .Text. Es es error 5560 en tiempo de
ejecución (y se para en el Do While .Execute) "El cuadro del texto
Buscar contiene una expresión que no es valida". A ti te funciona? en
la doc del Word teoricamente si que viene lo de .{4,}. pero a mí no me
va
Saludos y, de nuevo, gracias
Respuesta Responder a este mensaje
#9 speichre
10/09/2008 - 20:17 | Informe spam
Hola Mónica

Eres una "crack" :) se ve que estás metida en estas cosas... funciona
perfecto.

Abusando ya de tu amabilidad te plantearía dos cuestiones adicionales
relacionadas que puedes declinar sin problema, bastante has ayudado.

1. Además de los ..., hay ciertos campos que tienen un texto que será
el "por defecto" (por ejemplo en un campo de formulario de dirección
pondrá calle/plaza/avenida). PAra estos que no tenían puntos y sí
tienen un texto (se haría manualmente uno a uno) y para facilitar la
creación de formularios a partir de documentos de Word quería
(partiendo de las palabras seleccionadas): copiarlas en el
portapapeles, insertar un campo de formulario y luego botón derecho-
propiedades y añadir el texto copiado como texto por defecto. He


grabado la macro pero no pone el texto copiado sino siempre a tiro
fijo "calle/plaza", cuando a lo mejor es soltero/casado. ¿Entiendes?

El código que tengo es:

Sub DibujarForm2()
'
' DibujarForm2 Macro
'
Selection.Copy
Selection.FormFields.Add Range:=Selection.Range, Type:= _
wdFieldFormTextInput
Selection.MoveLeft Unit:=wdCharacter, Count:=1
With Selection.FormFields(1)
.Name = "Texto1"
.EntryMacro = ""
.ExitMacro = ""
.Enabled = True
.OwnHelp = False
.HelpText = ""
.OwnStatus = False
.StatusText = ""
With .TextInput
.EditType Type:=wdRegularText, Default:="^c", Format:="" '
< aquí está el problema, y con ^c no lo sustituye por el clipboard
.Width = 0
End With
End With
End Sub

2. Habría alguna manera de proteger el documento vía macro con unas
opciones ya predeterminadas (es decir, que limite el formato a una
selección de estilos, que admita sólo la edición de los campos de
formulario y que se quede esperando que la persona introduzca la
contraseña? es eso posible vía VBA? desde luego si grabo la Macro en
cuanto pide la contraseña se para la grabación y no se queda nada
registrado de lo hecho.

Saludos y mil gracias, puedas aportar algo o no a estos dos últimos
puntos.
Respuesta Responder a este mensaje
#10 Monica May
11/09/2008 - 01:28 | Informe spam
Holass,

..ciertos campos que tienen un texto que sera
el "por defecto" (por ejemplo en un campo de formulario de direccion
calle/plaza/avenida). ...
tienen un texto (se haría manualmente uno a uno) y para facilitar la
creacion de formularios a partir de documentos de Word queria
(partiendo de las palabras seleccionadas): copiarlas en el
portapapeles, insertar un campo de formulario y luego boton derecho-
propiedades y anadir el texto copiado como texto por defecto...



Bien en lugar de seleccionar y copiar y luego el resto casi veo mejor
que :

-> primero se inserte el campo de formulario en el punto donde lo quieras
[SIN seleccionar nada] el codigo hara el resto...
-> luego Seleccione el texto
->luego lo incluya como texto predeterminado en el formulario


Se podria recoger en una variable el texto seleccionado pero la necesidad de
insertar el campo pues se pierde en el vacio absoluto :P !!


Bien prueba este codigo ->

'[]

Sub DibujarForm2_2()

Dim cmpTexto As FormField

Set cmpTexto = Selection.FormFields.Add _
(Selection.Range, wdFieldFormTextInput)

With Selection

.MoveLeft wdWord, 2
.MoveRight wdWord, 1, wdExtend

With cmpTexto
.EntryMacro = ""
.ExitMacro = ""
.TextInput.EditType Type:=wdRegularText, _
Default:=Selection.Text, Format:=""
End With
.MoveLeft wdWord, 1
End With

End Sub

'[]

todo esto lo realizas claro esta sin proteccion en documento ...!

Bien el punto 2 :

manera de proteger el documento via macro con unas
opciones ya predeterminadas (es decir, que limite el formato a una
seleccion de estilos, que admita solo la edicion de los campos de
formulario y que se quede esperando que la persona introduzca la
contraseña? es eso posible vía VBA?




Si es posible lo unico el tema de los estilos :( si quisieras unos estilos
determinados necesitariamos un boton adicional quiza ? no sep tengo que
probarlo esto de los estilos, manana lo miro y te comentos okeis ? :-)

Bueno prueba a ver y comentanos...!!

Saludos
Monica




El codigo expuesto

Sub DibujarForm2()
'
' DibujarForm2 Macro
'
Selection.Copy
Selection.FormFields.Add Range:=Selection.Range, Type:= _
wdFieldFormTextInput
Selection.MoveLeft Unit:=wdCharacter, Count:=1
With Selection.FormFields(1)
.Name = "Texto1"
.EntryMacro = ""
.ExitMacro = ""
.Enabled = True
.OwnHelp = False
.HelpText = ""
.OwnStatus = False
.StatusText = ""
With .TextInput
.EditType Type:=wdRegularText, Default:="^c", Format:="" '
< aquí está el problema, y con ^c no lo sustituye por el clipboard
.Width = 0
End With
End With
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida