Programación General > Visual Basic para principiantes

 Fallo en cerrar documento de Word desde VB6

<< < (2/2)

Jimbenit:

--- Cita de: "cpmario" ---El comando para cerrar word es:

--- Código: Text ---Word.Application.Quit   :comp:
--- Fin de la cita ---
Eso ya lo habia pensado...

--- Cita de: "m0skit0" ---Pues porque habrás hecho el Quit antes de salvar...
--- Fin de la cita ---
...
El error estaba en que no declare el objeto Word.Document, de esta forma:

--- Código: Visual Basic ---Set Doc = Word_.Documents.AddDoc.Activate Sino que lo agregue como :

--- Código: Visual Basic --- 'AGREGA  DOCUMENTO Word.Documents.Add 
Esto ocasiona que al momento de cerrar, solo se cierra la aplicacion Word.apllication y no la Documents dando por resultado que la aplicacion Winword.exe quede abierta.

Conclusión:
Al momento de crear una instancia de Word siempre usar un objeto para word.application y otro para el Documents.


Aqui les dejo mi code ya corregido:
MODULO:

--- Código: Visual Basic --- Public Word_ As Word.Application'Objeto Word    Sub AgregarWord(Texto_A_Escribir As String, Nombre_ArchivoTXT As String)    If Nombre_ArchivoTXT = "" Then Exit Sub Dim Texto As StringDim Nombre_Archivo As String 'este es el nombre del archivo sin la extensión.Texto = Texto_A_Escribir     Dim Doc As Word.Document        'Iniciar word    Set Word_ = New Word.Application    Word_.Visible = True    'Iniciar documento    Set Doc = Word_.Documents.Add    Doc.Activate                     'AGREGA TEXTO        Word_.Selection.Font.Color = wdColorBlack        Word_.Selection.Font.Name = "Courier new"        Word_.Selection.TypeText Texto        'AGREGA PARRAFO        Word_.Selection.TypeParagraph        'Quitando seleccion        Word_.Selection.EndOf         'SELECCIONA TEXTO    On Error GoTo Adelante        Word.Selection.WholeStory        Word.Selection.Font.Size = 10        Word_.Selection.EndOfAdelante1:         Nombre_Archivo = Left(Nombre_ArchivoTXT, Len(Nombre_ArchivoTXT) - 4)    Doc.SaveAs App.Path & "" & Nombre_Archivo & ".doc"                     Word_.Quit True        Set Word_ = Nothing        Adelante:        If Err.Number = 462 Then            Resume Adelante1        End If        End Sub  Public Function LeerTexto(ArchivoTXT As String) As String            If ArchivoTXT = "" Then Exit Function    Dim NroLibre As Integer    Dim Ruta As String    Dim Linea As String    Dim Texto As String    Ruta = App.Path & "" & ArchivoTXT    NroLibre = FreeFile         Open Ruta For Input As #NroLibre        While Not EOF(1)            Line Input #NroLibre, Linea            Texto = Texto & Linea & vbCrLf        Wend    Close #NroLibre LeerTexto = Texto End Function  
EN EL FORM:

--- Código: Visual Basic --- Private Sub Command1_Click()  Dim Archivo As StringDim Texto As String List1.ListIndex = 0Archivo = List1.Text DoArchivo = List1.Text Texto = LeerTexto(Archivo)Text1.Text = TextoCall AgregarWord(Texto, Archivo)   If List1.ListIndex + 1 >= List1.ListCount Then Exit SubList1.ListIndex = List1.ListIndex + 1Loop Until List1.ListIndex = List1.ListCount  MsgBox ("Finalizado") End Sub Private Sub Form_Load() Dim Archivo As String    Archivo = Dir(App.Path & "*.txt") While Archivo <> ""    List1.AddItem Archivo    Archivo = DirWend    End Sub  
Saludos.

Nota:
Coloquen un listbox y un textbox multiline = true, scrollbars = vertical

Nebire:
Un detalle jimbenit...

Cuando invocas una función, lo primero que se hace es reservar memoria para todas las variables definidas explícitamente... por tanto esto que haces:


--- Código: Visual Basic --- Public Function LeerTexto(ArchivoTXT As String) As String            If ArchivoTXT = "" Then Exit Function    Dim NroLibre As Integer    Dim Ruta As String    Dim Linea As String    Dim Texto As String       ...........  No evita que se reserve memoria. supongo que la razón por que pones la línea 'if...then ...exit..'' la 1ª es que crees que ahorras tiempo si primero se ejecuta esa línea y asó no 'pierde' tiempo en reservar memoria para variables que al final no se van a usar. Sin embargo esto no sucede así... Incluso aunque pongas al final de la función un 'dim x as byte' lo 1º será reservar memoria para las variables luego se procesa el resto, por tanto, ya que no se tiene control sobre esto, es preferible al menos ganar en claridad y orden...

Por tanto será más adecuado poner el código así, dado que el tiempo en procesarse y los recursos empleados son idénticos.:


--- Código: Visual Basic --- Public Function LeerTexto(ArchivoTXT As String) As String    Dim NroLibre As Integer    Dim Ruta As String    Dim Linea As String    Dim Texto As String     If ArchivoTXT = "" Then Exit Function    ..............  

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa