Programación General > Visual Basic para principiantes
Fallo en cerrar documento de Word desde VB6
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
[*] Página Anterior
Ir a la versión completa