Título: Crear archivo WORD con columnas
Publicado por: rapbyone en 26 Abril 2021, 16:53 pm
Estimados, tengo la siguiente función con la cual creo un archivo word (.doc) pero no consigo dar con el codigo para insertar una tabla. Agradecería su ayuda. :rolleyes: Gracias amigos Private Sub MakeWordDoc(ByVal file_name As String, ByVal title As String, ByVal body As String) On Error Resume Next Dim word_app As Word.Application Dim word_doc As Word.Document ' Open Word and create a document. Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Write the title. word_app.ActiveWindow.Selection.Font.Size = 25 word_app.ActiveWindow.Selection.Font.Name = "Arial" word_app.Selection.TypeText title 'word_app.ActiveWindow.Selection.Font.Size = 24 ' Save the file. word_doc.SaveAs FileName:=file_name ' Close the document and Word. word_doc.Close True word_app.Quit False End Sub
Título: Re: Crear archivo WORD con columnas
Publicado por: EdePC en 27 Abril 2021, 18:35 pm
Saludos, Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.table Para tu ejemplo quedaría más o menos así: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) Set rng = word_doc.Range(Start:=0, End:=0) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 27 Abril 2021, 22:15 pm
Saludos, Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.table Para tu ejemplo quedaría más o menos así: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) Set rng = word_doc.Range(Start:=0, End:=0) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Muchas gracias estimado, funcionó de maravilla.
Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 2 Mayo 2021, 03:17 am
Saludos, Debes tener la referencia a mano: https://docs.microsoft.com/es-es/office/vba/api/word.table Para tu ejemplo quedaría más o menos así: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) Set rng = word_doc.Range(Start:=0, End:=0) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Estimado, como puedo hacer para crear la tabla como continuación de otro elemento. al establecer el rango (.Range(Start:=0, End:=0)) la tabla se crea al principio del documento. mi idea es que la tabla salga después de un título por ejemplo, pero no a través de un rango especifico, por que el texto previo va variando y por ende el rango irá cambiando también, espero me haya dado a entender. Gracias por tu ayuda.
Título: Re: Crear archivo WORD con columnas
Publicado por: EdePC en 2 Mayo 2021, 05:04 am
Siempre puedes referirte a objetos del documento como palabras o párrafos para obtener un Rango adecuado, por ejemplo tomemos como primer párrafo a tu Título, entonces obtenemos un Rango que sea el último elemento de dicho párrafo (el salto de línea) e insertamos ahí la tabla: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Mi Título" ' Inserta una tabla despues del primer párrafo (despues del título) Set rng = word_doc.Range(word_doc.Paragraphs(1).Range.End - 1, word_doc.Paragraphs(1).Range.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 2 Mayo 2021, 09:31 am
Siempre puedes referirte a objetos del documento como palabras o párrafos para obtener un Rango adecuado, por ejemplo tomemos como primer párrafo a tu Título, entonces obtenemos un Rango que sea el último elemento de dicho párrafo (el salto de línea) e insertamos ahí la tabla: Private Sub mkdoc() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Mi Título" ' Inserta una tabla despues del primer párrafo (despues del título) Set rng = word_doc.Range(word_doc.Paragraphs(1).Range.End - 1, word_doc.Paragraphs(1).Range.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Entiendo, el problema es que el contenido del word va variando y los párrafos van cambiando, hay alguna manera de que por ejemplo el rango se defina a través de una palabra? por ejemplo, que inserte la tabla después de la palabra "casa". Gracias por la ayuda amigo
Título: Re: Crear archivo WORD con columnas
Publicado por: EdePC en 2 Mayo 2021, 17:44 pm
Es ese caso puedes buscar (.Find) en el documento la palabra que quieras, obtener a partir de esa palabra un nuevo Rango e insertar ahí tu tabla: Private Sub mkdoc2() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Son escasas las casas, pero mi casa es mi casa" ' Inserta una tabla despues de la primera palabra "casa" Set rng = word_doc.Content rng.Find.Execute FindText:="casa", MatchWholeWord:=True If rng.Find.Found = True Then Set rng = word_doc.Range(Start:=rng.End, End:=rng.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant End If word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Título: Re: Crear archivo WORD con columnas
Publicado por: rapbyone en 2 Mayo 2021, 19:33 pm
Es ese caso puedes buscar (.Find) en el documento la palabra que quieras, obtener a partir de esa palabra un nuevo Rango e insertar ahí tu tabla: Private Sub mkdoc2() Dim word_app As Word.Application Dim word_doc As Word.Document Dim tbl As Word.Table Dim rng As Word.Range Set word_app = New Word.Application Set word_doc = word_app.Documents.Add(DocumentType:=wdNewBlankDocument) ' Inserta un título al final del documento (al inicio porque está vacío) word_doc.Content.InsertAfter "Son escasas las casas, pero mi casa es mi casa" ' Inserta una tabla despues de la primera palabra "casa" Set rng = word_doc.Content rng.Find.Execute FindText:="casa", MatchWholeWord:=True If rng.Find.Found = True Then Set rng = word_doc.Range(Start:=rng.End, End:=rng.End) Set tbl = word_doc.Tables.Add(Range:=rng, NumRows:=3, NumColumns:=4) tbl.AutoFormat Format:=wdTableFormatElegant End If word_doc.SaveAs FileName:="docu" word_doc.Close True word_app.Quit False End Sub
Estimado, agradezco la ayuda, funcionó perfecto, muchas gracias amigo ;-)
|