Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rapbyone

#1
Cita de: 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:

Código (vb) [Seleccionar]
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  ;-)
#2
Cita de: 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:

Código (vb,11,14) [Seleccionar]
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
#3
Cita de: 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í:

Código (vb, 4,5,10,11,12) [Seleccionar]
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.
#4
Cita de: 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í:

Código (vb, 4,5,10,11,12) [Seleccionar]
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.
#5
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

Código (vb) [Seleccionar]

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


#6
Estimados, recurro a su sapiencia, tengo un textbox multilinea con la siguiente estructura:

hola
mundo
nuevo

y lo que quiero es poder extraer cada linea por separada, por ejemplo en una variable, la linea 1 en otra la 2 y en otra la 3, pero no encuentro la forma de hacerlo.

Espero me puedan ayudar con eso.
Muchas gracias
#7
Hola amigos, acudo a sus conocimientos, tengo un msflegrid, en la primera columna tengo algunos número, la idea es que todos los números mayores a 25 queden con el fondo color rojo, elaboré este codigo:

Código (vb) [Seleccionar]

'Problemas
MSFlexGrid3.Col = 0
For i = 0 To 23
MSFlexGrid3.Row = i
If MSFlexGrid3.Text > "25" Then
MSFlexGrid3.CellBackColor = RGB(255, 127, 100)
Exit Sub
End If
Next



El problema es que solo colorea la celda del primer valor encontrado en este caso el "28 del AC Milan (ver imagen) y la idea es que lo haga con todos los valores sobre 25 de la columna. Es decir Napoly, Toteham, etc.




Alguna idea amigos??
Muchas gracias
#8
Estimados, estoy trabajando con el control "MSFlexGrid" el tema es que necesito obtener el valor derecho de la celda seleccionada, es decir por ejemplo si selecciono "Mehta" (Ver imagen) me muestre en un msgbox el valor "100"



Se puede??
Muchas gracias amigos
#9
Cita de: NEBIRE en 10 Agosto 2017, 16:25 PM
No existe ninguna otra manera que recorrer la lsita mediante un bucle.

Recorre la lista con un bucle,
- Si el elemento acaba en "[1]" añade 1 al contador de ese tipo...
- Si el elemento acaba en "[2]" añade 1 al contador de este otro elemento...
- Si no acaba en ninguno de estos (suponiendo que tengas también algún "[0]", no haces nada, o quizás debas también sumarlo si por ejemplo acaban en "[2]"...
Fin del bucle


...que en VB6 sería más o menos:
Código (vb) [Seleccionar]
Dim k as integer

For k = 0 to Listbox1.Listcount-1
   If (Instrrev(Listbox1.List(k) = "[1]" then
       Cuenta1 = (Cuenta1 + 1)
   Elseif Instrrev(Listbox1.List(k) = "[2]" then
       Cuenta2 = (Cuenta2 + 1)
   End if
Next

Msgbox "Cuenta de [1]: " & cstr(Cuenta1) & vbcrlf & _
      "Cuenta de [2]: " & cstr(cuenta2)


Ahora, coincido con Elektro, cuandio te reclama:

Amigos, en primer lugar les agradezco por darse el tiempo de ayudarme, he aprendido de vb6 pero aún hay cosas que no entiendo del todo, si bien no es el mejor control, dadas las características de mi programa, necesito que sea de esa manera.

Intenté con el código, pero me marca un error, al parecer falta un separador de listas, intenté agregando un ")" pero me dice que "El argumento no es opcional" sobre "InStrRev".



Gracias nuevamente amigos
#10
Cita de: Eleкtro en  8 Agosto 2017, 23:25 PM
¿Cómo dices, la cantidad de "[1]" y [2]" en total?. y ¿VB6, o VB.NET?.

Amigo es para VB6,  :-(