Fermu Website


Web www.fermu.com
Home arrow Foro
FireBoard
Welcome, Guest
Please Login or Register.    Lost Password?
Re: Boton de documento word en formulario de acces (1 viewing) (1) Guest
Go to bottom Post Reply Favoured: 2
TOPIC: Re: Boton de documento word en formulario de acces
#8036
fprat (User)
Ocasional
Posts: 30
graphgraph
User Offline Click here to see the profile of this user
Re: Boton de documento word en formulario de acces 2 Months, 1 Week ago Karma: 0  
¿Sabéis cómo preguntar desde VBA a un documento Word si contiene cierta subcadena (la marca) o no lo hace?

A esto, me contesto yo solo: pues cuando llamas al método Execute de un objeto de tipo Find, el método devuelve un valor lógico diciendo si la búsqueda ha tenido éxito (VERDADERO) o ha sido infructuosa (FALSO). Y también hay una propiedad Found donde se guarda si la búsqueda ha sido exitosa o no, pero vaya, una solución para lo que yo quería es ésta:

Code:

If wordDoc.Content.Find.Execute(FindText:=labelToBeReplaced) Then...


Para hilar fino, lo que hago en cada pregunta es utilizar un objeto Find asociado a un objeto Range (en este caso, wordDoc.Content) que creo "al vuelo" con todo el contenido del documento wordDoc (bueno, encabezados y pies de página parece que no). Si utilizara el objeto Find asociado a appWord.Selection, podría tener problemas "de memoria", esto es, que me contestara que algo no se encuentra (aun estando en el documento) porque lo último que buscó lo encontró más adelante de donde se halla lo que busca ahora y, por defecto, la búsqueda la está haciendo hacia adelante y sin "wrapping". En fin, un detalle un poco molesto relacionado con que el objeto se acuerde de por dónde se quedó la última vez que buscó...

Hala, me voy a pegar patadas a un balón

Yo, no mi Mii

Bye!

Fede
 
Report to moderator   Logged Logged  
 
Last Edit: 2008/05/14 19:25 By fprat.
  The administrator has disabled public write access.
#8055
fprat (User)
Ocasional
Posts: 30
graphgraph
User Offline Click here to see the profile of this user
Re: Boton de documento word en formulario de acces 2 Months, 1 Week ago Karma: 0  
Hola, alegre pandilla

A las cosas que voy averiguando, me contesto yo solo:

¿sabrías cómo preguntar en VBA si un documento tiene o no un determinado marcador?

Para preguntarle al Word.Document wordDoc si tiene un marcador llamado "hola", habría que hacer lo siguiente:

Code:

If wordDoc.Bookmarks.Exists("hola") Then...


Esto está bien, vamos aprendiendo cosas.

Be happy!

Fede

PS: Andrés, hace tiempo que no se te ve (lee) por aquí. ¿Estás "empollando" mucho VBA?
 
Report to moderator   Logged Logged  
  The administrator has disabled public write access.
#8059
fprat (User)
Ocasional
Posts: 30
graphgraph
User Offline Click here to see the profile of this user
Re: Boton de documento word en formulario de acces 2 Months, 1 Week ago Karma: 0  
Is anybody there?

Según voy averiguando cosas, las incorporo a la BD de ejemplo que empezó Mónica (adjunto mi cuarta versión):

Code:


Option Compare Database
Option Explicit

Private Sub BotonWord_Click()

Const plantilla As String = "\miplantilla.dot"
Const maxToReplace As Integer = 255

Dim appWord As Word.Application
Dim wordDoc As Word.Document
Dim formField As DAO.Field
Dim allDocument As Range
Dim lenPending As Long
Dim labelToBeReplaced, nextStr, pendingStr As String
Dim maxLeftByLabel As Integer

'falta el tratamiento de errores'

Set appWord = New Word.Application
With appWord
.Visible = False
End With
Set wordDoc = appWord.Documents.Add(CurrentProject.Path & plantilla)
With appWord.Selection.Find
For Each formField In Me.Recordset.Fields
'MsgBox "Tratando el campo: " & formField.Name'
labelToBeReplaced = "<<" & formField.Name & ">>"
If wordDoc.Content.Find.Execute(FindText:=labelToBeReplaced) Then
maxLeftByLabel = maxToReplace - Len(labelToBeReplaced)
.Text = labelToBeReplaced
pendingStr = Me(formField.Name).Value & "" 'para prevenir nulos'
lenPending = Len(pendingStr)
Do 'incluso si el campo está vacío hay que sustituir una vez...'
If lenPending > maxToReplace Then
nextStr = Left(pendingStr, maxLeftByLabel) & labelToBeReplaced
lenPending = lenPending - maxLeftByLabel
pendingStr = Right(pendingStr, lenPending)
Else
nextStr = pendingStr
lenPending = 0
pendingStr = ""
End If
.Replacement.Text = nextStr
Call .Execute(Replace:=Word.WdReplace.wdReplaceAll)
Loop While lenPending > 0
End If
Next formField
End With
With appWord
.Visible = True
.Activate
.WindowState = wdWindowStateMaximize
End With

Set appWord = Nothing
Set wordDoc = Nothing
Set formField = Nothing
Exit Sub
End Sub



(He cerrado con una comilla simple innecesaria cada comentario del código, para que el visualizador del foro no se líe.)

Algunas novedades:

1. Ya voy recorriendo automáticamente todos los campos del formulario. Utilizo un objeto Recordset para ello, pero no uno que tenga que crear mediante una consulta, sino el Recordset propio del formulario, al que accedo mediante una propiedad de éste.

2. Por cada uno de los campos, antes de intentar incorporarlo a la plantilla Word, compruebo que realmente haya alguna marca de ese campo en la plantilla.

3. Siempre que haya marca, entraré al menos una vez en el bucle que sustituye "trozo a trozo". Si no me asegurara de ello (con Do/Loop en vez de While/Wend), en el caso de campos vacíos me quedaría con la marca del campo en la plantilla.

4. Me aseguro de que, una vez hechas las correspondientes sustituciones sobre las marcas de la plantilla, el documento resultante se muestre maximizado en la pantalla. Para ello, antes de la asignación sobre appWord.WindowState, necesito appWord.Activate.

Lo que me falta todavía es:

1. Un tratamiento de errores decente.

2. Averiguar por qué los párrafos del campo "texto" se muestran en el documento Word con sangría de primera línea (excepto el primer párrafo).

Cualquier ayuda será bienvenida.

Un saludete.

Fede
File Attachment:
File Name: V4.zip
File Size: 31836
 
Report to moderator   Logged Logged  
 
Last Edit: 2008/05/15 16:29 By fprat.
  The administrator has disabled public write access.
#8060
Mónica (Admin)
Admin
Posts: 820
graphgraph
User Offline Click here to see the profile of this user
Re: Boton de documento word en formulario de acces 2 Months, 1 Week ago Karma: 18  
Benassssss !!!

Como estamos !!!

UY gracias por el aporte Fede ya he aprendido otra cosica mas que no sabia yo mu bien , tenia yo un enlace a una web muy buena de un MVP en Word [creo que era la de Greg] donde daba unas macros con un truquillo para el replace.text pero no me acuerdo muy bien de como era tengo que buscarlo que tengo los enlaces en un archivo y he de buscar el archivo a ver si lo encuentro

Por cierto tu como Juan palomo yo me lo guiso y yo me lo como jajaa!

El tema de los marcadores es muy util para funcionar en word mas que util es socorrido

 
Report to moderator   Logged Logged  
  The administrator has disabled public write access.
#8061
Mónica (Admin)
Admin
Posts: 820
graphgraph
User Offline Click here to see the profile of this user
Re: Boton de documento word en formulario de acces 2 Months, 1 Week ago Karma: 18  
mejor dicho aportes que nos hemos cruzado

luego a la noche me miro esta nueva version que voy con el tiempo justo a todos los lados

 
Report to moderator   Logged Logged  
  The administrator has disabled public write access.
#8063
lourdes (User)
Novato
Posts: 19
graphgraph
User Offline Click here to see the profile of this user
Re: Boton de documento word en formulario de acces 2 Months, 1 Week ago Karma: 0  
Hola Chicos, Hace tiempo que no he podido contectarme, me tenian liadas otras cosas, pero espero volver a engancharme.

Gracias Fede por su aportaciones.
Algunas (muchas) me vienen un poco grade y me pierdo. Tender que empezar a ver esos manuales que nos has facilitado a Adres y a mi.
En cuanto puedea ..... si en cuanto pueda...si se que lo tengo que hacer.

Te agradezco la última aportación, queda muy elegante y con la compodidad de no terner que introducir todos los campos en la sub

Monica, la tuya es la que mejor entiendo es secilla y la utilizo para un formulario más corto que tengo. Mil gracias

Adrés, no entendí bien tu pregunta, aun que seguro que Monica te habrá aclarado algo, pero no te entido bien que quieres hacer

Bueno chicos, AHORA TENGO OTROS PROBLEMAS...que no son de word.

Ya os dige que era la primera vez que me introducia en un foro, por lo que no se si tengo que habrir una nueva consulta o seguimos aqui

OS introduzco algo...

Se trata de un formulario de entrada de datos que los carga sobre una tabla (del que esta craeado).
Este a su vez tiene que obtener datos de otras dos tablas, con cuadros combinados (que si se hacer), la cuestión es que hay campo que deben actualizarse con la opción elegida en esos c.Cob.y que se carge sobre la primera tabla.

Habeis entendido algo
 
Report to moderator   Logged Logged  
  The administrator has disabled public write access.
Go to top Post Reply
Powered by FireBoardget the latest posts directly to your desktop
Joomla Templates by JoomlaShack