VBScript Funcion SaveAs arroja error

Iniciado por guillehampp, 10 Febrero 2015, 17:25 PM

0 Miembros y 1 Visitante están viendo este tema.

guillehampp

Hola, cuando trato de cuardar un archivo .xls con la funcion SaveAS me arroja el siguiente error:
"No se puede tener acceso al archivo"

Código (vb) [Seleccionar]
Const xlNormal = -4143
filename = objFile.GetFileName(oFile)
IF objFile.FileExists(deletefile) Then
objFile.DeleteFile(deletefile)
objRawData.SaveAS "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
ELSE
objRawData.SaveAs  "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
objRawData.Close SaveChanges=True

END IF

elezekiel

IF objFile.FileExists(deletefile) Then
objFile.DeleteFile(deletefile)
objRawData.SaveAS "d:\Script\Outbox\" & filename & ".xls"&, xlNormal


primero comprobas si existe y si te da verdadero lo borras?
creo q la primer parte no va? lo estas borrando y luego lo qeres guardar pero no lo encuentra por q lo borraste
porq el rawdata creo q escribe sobre el archivo no lo crea

no se sobre scripting manejo vb quizas me equivoque

guillehampp

Cita de: elezekiel en 10 Febrero 2015, 17:37 PM
IF objFile.FileExists(deletefile) Then
objFile.DeleteFile(deletefile)
objRawData.SaveAS "d:\Script\Outbox\" & filename & ".xls"&, xlNormal


primero comprobas si existe y si te da verdadero lo borras?
creo q la primer parte no va? lo estas borrando y luego lo qeres guardar pero no lo encuentra por q lo borraste
porq el rawdata creo q escribe sobre el archivo no lo crea

no se sobre scripting manejo vb quizas me equivoque


Es asi, esto es una actividad que se hace una vez por semana, por lo que el archivo es distinto c/semana.
dispongo de dos carpetas Inbox y Outbox
Este Script completo lo que hace, es copiar de una Sheet a otro Xls
cuando guarda comprueba si ya hay un archivo, si lo hay, lo borra y guarda el nuevo.

Eleкtro

#3
Cita de: guillehampp en 10 Febrero 2015, 17:25 PM
"No se puede tener acceso al archivo"

Código (vb,8) [Seleccionar]
Const xlNormal = -4143
filename = objFile.GetFileName(oFile)
IF objFile.FileExists(deletefile) Then
objFile.DeleteFile(deletefile)
objRawData.SaveAS "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
ELSE
objRawData.SaveAs  "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
objRawData.Close SaveChanges=True

END IF


VBS, a diferencia de VBA, no soporta parámetros nombrados (named parameters) y seguramente sea esa la instrucción que te está lanzando un error, no al método SaveAs como piensas, ya que según la documentación oficial de Microsoft, y aunque no puedo evaluar la sintaxis porque desconozco que valor le das a la variable "filename" o si el directorio que utilizas existe, estás utilizando la parametización correcta para el método SaveAs:
Fuente: Workbook.SaveAs Method (Excel)

Como ya he explicado, no te va a funcionar tal y como lo estás escribiendo, ya que VBS no soporta esa sintaxis,
Si quieres guardar los cambios en el archivo al liberar el objeto, en VBS, simplemente omite el nombre del parámetro al llamar al método close:
objRawData.Close True

El resto del script parece estar bien a simple vista, aunque como ya he comentado hay ciertos detalles que no puedo evaluar sin conocer la información necesaria.

Aparte del error de sintaxis que estás cometiendo, quizás tambien te pudiera dar problemas la enumeración del formato especifico de archivo que estás utilizando (-4143=xlWorkbookNormal), si sigues teniendo problemas despues de la corrección que he mencionado, prueba a utilizar el valor 51 de la enumeración (xlWorkbookDefault).
Fuente: XlFileFormat Enumeration (Excel)

Saludos








guillehampp

Antes que nada, muchas gracias la explicacion. Como dices, parece ser un problema de compatibilidad al intentar guardarlo, por lo que he agregado esta linea al codigo, si es necesario agrego todo el codigo. lo he dejado de esta manera.

filename = objFile.GetFileName(oFile)
IF objFile.FileExists(deletefile) Then
objFile.DeleteFile(deletefile)
objExcel.ActiveWorkbook.CheckCompatibility = False
objExcel.ActiveWorkbook.SaveAs  "d:\Script\Outbox\" & filename, -4143
objExcel.ActiveWorkbook.Close True
ELSE
objExcel.ActiveWorkbook.CheckCompatibility = False
objExcel.ActiveWorkbook.SaveAs  "d:\Script\Outbox\" & filename, -4143
objExcel.ActiveWorkbook.Close True
END IF


filename = objFile.GetFileName(oFile) esta linea obtiene solamente el nombre del archivo, sin la extensión.