Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: guillehampp en 10 Febrero 2015, 17:25 pm



Título: VBScript Funcion SaveAs arroja error
Publicado por: guillehampp en 10 Febrero 2015, 17:25 pm
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
  1. Const xlNormal = -4143
  2. filename = objFile.GetFileName(oFile)
  3. IF objFile.FileExists(deletefile) Then
  4. objFile.DeleteFile(deletefile)
  5. objRawData.SaveAS "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
  6. ELSE
  7. objRawData.SaveAs  "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
  8. objRawData.Close SaveChanges=True
  9.  
  10. END IF
  11.  


Título: Re: VBScript Funcion SaveAs arroja error
Publicado por: elezekiel en 10 Febrero 2015, 17:37 pm
Código:
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


Título: Re: VBScript Funcion SaveAs arroja error
Publicado por: guillehampp en 10 Febrero 2015, 18:12 pm
Código:
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.


Título: Re: VBScript Funcion SaveAs arroja error
Publicado por: Eleкtro en 11 Febrero 2015, 09:54 am
"No se puede tener acceso al archivo"

Código
  1. Const xlNormal = -4143
  2. filename = objFile.GetFileName(oFile)
  3. IF objFile.FileExists(deletefile) Then
  4. objFile.DeleteFile(deletefile)
  5. objRawData.SaveAS "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
  6. ELSE
  7. objRawData.SaveAs  "d:\Script\Outbox\" & filename & ".xls"&, xlNormal
  8. objRawData.Close SaveChanges=True
  9.  
  10. END IF
  11.  

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) (http://msdn.microsoft.com/en-us/library/office/ff841185.aspx)

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:
Código:
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) (http://msdn.microsoft.com/en-us/library/office/ff198017.aspx)

Saludos


Título: Re: VBScript Funcion SaveAs arroja error
Publicado por: guillehampp en 11 Febrero 2015, 17:49 pm
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.

Código:
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

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