Jump to content

crear un documento nuevo de una plantilla desde excel


Recommended Posts

Posted

Hola buen dia foristas, me veo en la necesidad de volver a publicar esto ya que no he podido solucionarlo, y resulta lo siguiente:

Tengo un Formulario con una lista donde al seleccionar algun elemento de la lista y darle en word me genera un informe con respecto a dicha lista, el detalle aqui es que cuando me genera dicho informe lo hace sobre la misma plantilla original y lo que necesito es que me lo genere desde la plantilla para que sea un documento nuevo pero con los datos de la plantilla, ya intenté cambiar la extension de la plantilla de .doc a .doxt para que al momento de abrir la plantilla solo abra una copia y no se modifique la plantilla original pero no lo hace y la verdad ya nose como hacerle, por ahi alguien me paso un link pero logré entenderlo muy bien. De antemano agradecería mucho la ayuda. Saludos

ayudaexcel.rar

  • 2 weeks later...
Posted

en verdad nadie me puede ayudar con este tema?, tengo mucho tiempo arrastrandolo y no he encontrado respuesta en la red,

Guest sacfa
Posted

estoy descargando tu archivo vere que puedo hacer.

Posted

te agradesco mucho sacfa, obviamente hay que guardar los dos archivos en la misma carpeta. espero tu respuesta gracias

Posted

"Guardar como" el archivo de word luego de ejecutar la macro seria una opcion Valida puedes cambiar el nombre y la ubicacion y conservaras el original sin cambios.

Saludos.

Posted

hola LuisV26, no entiendo mucho el como hacer eso, al utilizar la grabadora de macros me sale este codigo

ChangeFileOpenDirectory "C:\Users\hermes\Desktop\"
ActiveDocument.SaveAs FileName:="Informe.docx", FileFormat:= _
wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False[/PHP]

pero la verdad no encuentro como relacionarlo con mi codigo de mi archivo, es decir en que parte de este codigo

[PHP]Private Sub CrearInforme_Click()

If L.ListIndex <> -1 Then

wdReplaceAll = 2 'Todas las ocurrencias
Set Obj_Word = CreateObject("Word.Application")

Obj_Word.Visible = True
Obj_Word.Documents.Open Filename:=ThisWorkbook.Path & "\Informe - copia.docx"

For Y = 1 To 11 'numero de filas
With Obj_Word.Selection.Find 'con el objeto de word encontrado
.Text = "[" & Cells(1, Y).Value & "]" ' con el doc sustituye lo de la celda todo lo que haya entre[]
.Replacement.Text = Cells(L.ListIndex + 2, Y).Value
.Forward = True
.Wrap = wdFindAsk
.Format = False
.Execute Replace:=wdReplaceAll
End With
Next
MsgBox " se enviaron los datos a un documento de " & Obj_Word
Set Obj_Word = Nothing

End If

End Sub[/PHP]

tendria que ponerlo, espero me orientes mejor. Saludos

Guest Héctor Miguel
Posted

OJO: no es lo mismo "abrir" un documento-plantilla que CREAR un documento nuevo (NO guardado) basado en una plantilla

cambia esta línea de tu código:

Obj_Word.Documents.Open Filename:=ThisWorkbook.Path & "\Informe - copia.docx"

por otra +/- como la siguiente (OJO: adapta la ruta a tu plantilla)...

Obj_Word.Documents.Add _

Template:="c:\ubicacion y\carpetas con el\nombre de la plantilla.dotx", _

NewTemplate:=False, DocumentType:=0

y... NO te olvides que ese documento nuevo NO se ha guardado (aun) hasta que tu código (o el usuario) lo guarde

saludos,

hector.

Guest sacfa
Posted

Al fin utilizando como plantilla y despues de tanto prueba y error este es el resultado:

Private Sub CrearInforme_Click()

Dim wdReplaceAll

If L.ListIndex <> -1 Then

wdReplaceAll = 2 'Todas las ocurrencias

Set obj_word = CreateObject("Word.Application")

obj_word.Visible = True

obj_word.documents.Open Filename:=ThisWorkbook.Path & "\Informe - copia.docx"

ChDrive ThisWorkbook.Path

ChDir ThisWorkbook.Path

ActiveDocument.SaveAs Filename:=txtexpediente & ".doc", FileFormat:= _

wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _

True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _

False, SaveNativePictureFormat:=False, SaveFormsData:=False, _

SaveAsAOCELetter:=False

For Y = 1 To 11 'numero de filas

With obj_word.Selection.Find 'con el objeto de word encontrado

.Text = "[" & Cells(1, Y).Value & "]" ' con el doc sustituye lo de la celda todo lo que haya entre[]

.Replacement.Text = Cells(L.ListIndex + 2, Y).Value

.Forward = True

.Wrap = wdFindAsk

.Format = False

.Execute Replace:=wdReplaceAll

End With

Next

MsgBox " se enviaron los datos a un documento de " & obj_word

Set obj_word = Nothing

End If

End Sub

Revisa tu código y agregas lo que esta en rojo.

- - - - - Mensaje combinado - - - - -

Una observación:

El archivo se guarda con el nombre del txtexpediente, pero para que pueda hacerlo debes quitarle el símbolo de división de lo contrario da error.
Posted

gracias amigos, checare y les comento en el transcurso de la noche

hasta ahorita he checado a simple vista los codigos y el que me ha resultado es el codigo que me dió hector, seguire analizando tu caodigo sacfa aunque no creo pensarle mucho jeje pues no se mucho tampoco. les comento si veo algo mas. Gracias

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

Privacy Policy