Una vez intente exportar a excel y tenia que meter un control o componente pero recuerdo que no funcionaba con todas las versiones de excel, ¿cómo hago para que funcione con cualquier excel desde el 97 hasta el 2007 del vista?
Para utilizar excel desde vb se suele hacer primero una "referencia" a la librería de excel, dependiendo de la version que tengas instalada cascara si no coinciden en la version. Esto se puede solucionar si no se crea la referencia. El siguiente ejemplo es para word pero debe funcionar igual para excel unicamente cambia ("Word.Application") por ("Excel.Application") y una vez que compruebes que funciona cambia los nombres de las variables. También cambiará que en vez de Documents serán Sheets pero eso ya es otro tema. Suerte. Pon en un modulo esto -------------------------------------------------- Public objWord As Object Public objDoc As Object Public Function CrearWord() As Boolean On Error GoTo Error If ObtenerWord = False Then Set objWord = CreateObject("Word.Application") End If CrearWord = True Salir: Exit Function Error: CrearWord = False MsgBox Err.Number & " - " & Err.Description End Function Public Function CerrarAppWord() As Boolean On Error GoTo Error If ObtenerWord = False Then Set objWord = CreateObject("Word.Application") End If If objWord.Documents.Count <= 0 Then ' Cierra el Word objWord.Quit End If ' Elimina la referencia Set objWord = Nothing CerrarAppWord = True Exit Function Error: CerrarAppWord = False MsgBox Err.Number & " - " & Err.Description End Function Public Function CerrarWord() As Boolean On Error GoTo Error If ObtenerWord = False Then Set objWord = CreateObject("Word.Application") End If objWord.ActiveDocument.Close ' Cierra el documento 'objWord.Quit ' Elimina la referencia Set objWord = Nothing CerrarWord = True Salir: Exit Function Error: CerrarWord = False MsgBox Err.Number & " - " & Err.Description End Function Private Function ObtenerWord() As Boolean On Error GoTo Error Set objWord = GetObject(, "Word.Application") ObtenerWord = True Exit Function Error: ObtenerWord = False End Function Pon en un formulario esto otro -------------------------------------------- Private Sub Form_Load() CrearWord ObjWord. Documents. Add ObjWord. ActiveDocument.saveas "c:\prueba.doc" ObjWord. Quit CerrarWord End Sub 'Te deberia crear un documento en el raiz de c llamado prueba.doc. Prueba con distintas versiones de office yo lo he probado con 2K y XP.
Hola, gracias por contestar tan rapido, fíjate que pegue las funciones en un modulo y en un botón lo que iba en el form load, pero me marca error al cerrar el archivo, después de esta instrucción se va al error Instruccion: "objWord.ActiveDocument.Close" Y el error dice a veces: "-214717848 - Error de Automatización" Otras veces: "424 - se requiere un objeto" Y otras: "462 - el equipo servidor remoto no existe o no esta disponible" Pero siempre es por la misma instrucción: "objWord.ActiveDocument.Close" Tengo el XP y el office 97 (pesa mucho menos y hace casi lo mismo que los otros) pero no creo que tenga que ver con que no funcione, ¿no sera que primero hacemos un quit y luego lo tratamos de cerrar? CrearWord objWord.Documents.Add objWord.ActiveDocument.saveas "c:\prueba.doc" objWord.Quit CerrarWord Aunque el archivo si se termina creando pues lo busque en C y lo abre bien el word. ¿Otra pregunta como le agrego algo dentro? El archivo de excel que usaba era un texto separado por tabulaciones con terminación .xls Gracias de antemano
Tienes razón, quita la linea del Quit del FormLoad, es que al llamar a CerrarWord se vuelve a llamar a quit y por eso casca. Respecto al uso de la librería de Excel solo te puedo decir esto... Arriba del formulario ----------------------------- Private EApp As Object Private EwkB As Object Private EwkS As Object Para crear la hoja ----------------------------- Set EApp = CreateObject("excel.application") Set EwkB = EApp.Workbooks.Add Set EwkS = EwkB.Sheets(1) ' ' exibe a aplicação Excel ' EApp.Application.Visible = True ' Preenche a primeira e a segunda coluna ' com alguns valores numéricos EwkS.SaveAs "C:\" + Format(Date, "dd-mm-yy") + " " + Format(Now, "hh-mm") Para Insertar datos ----------------------------------- contFila = contFila + 1 EwkS.Range(A & contFila).FormulaR1C1 = Format(Now, "hh:mm:ss a/p") EwkS.Range(B & contFila).FormulaR1C1 = Format(data1, "0,0000") EwkS. Columns. AutoFit EwkB.Save Para liberar de memoria los objetos ---------------------------------------- If IsNull(EwkB) Then EwkB.Close End If If IsNull(EApp) Then EApp.Application.Quit End If Set EwkS = Nothing Set EwkB = Nothing Set EApp = Nothing
Hola Muchas gracias por la respuesta, me fue de mucha ayuda y ya pude poner una instrucción para meter algo en una celda. El office 97 lo abre bien sin problemas me imagino que todos los office (falta ver el vista) lo han de abrir bien. Les recomiendo el office 97, casi ni pesa y tiene ya 11 años, ¿aun requiere licencia? o ya no? Lo único es que me marco error en estas dos instrucciones pero ya las corregí, lo pongo aquí por si alguien más ve este foro que le sirva de ayuda, así estaban. EwkS.Range(A & contFila).FormulaR1C1 = Format(Now, "hh:mm:ss a/p") EwkS.Range(B & contFila).FormulaR1C1 = Format(data1, "0,0000") y asi quedaron bien EwkS.Range("A" & Trim(Str(contFila))).FormulaR1C1 = Format(Now, "hh:mm:ss am/pm") EwkS.Range("B" & Trim(Str(contFila))).FormulaR1C1 = Format(Data1, "0,0000") ah! y el excel se quedaba abierto así que entrecomille esto 'If IsNull(EwkB) Then EwkB.Close 'End If Y ya jala bien todo, Gracias y saludos desde Monterrey, Mexico PD ahora me surgió la duda de como agregar una linea dentro del word primero que me mandaste. Je