Saltar al contenido

Problema al abrir un archivo excel mediante VBA


Azulito76

Recommended Posts

publicado

Buenos días,

No diré que soy nuevo en VBA pero hay un problema que me supera y me ha llevado a pedir ayuda por aquí para ver si alguien le ha sucedido algo por el estilo y ha logrado solucionarlo.

Yo trabajo sobre el excel 2003.

Esta es la situación, tengo un archivo que necesita de otro excel para tomar los datos de este ( he incluido en adjuntos el archivo excel citrix.xls ), el archivo citrix.xls fue creado mediante un programa del cual, tengo sospechas que lo crea en una versión del excel inferior al 2003.

El problema es el siguiente, cuando por medio de una macro llega la parte en la cual la macro abre el archivo citrix.xls para copiar la hoja y pegarla en el archivo excel donde se encuentra la macro y continué procesando los datos lo hace bien, copia y pega sin problemas, la razón del problema es que la columna de citrix.xls donde se encuentra la fecha, al pegarla en el excel de la macro le cambia el formato, por ejemplo la fecha de la primera columna de citrix es:

12/11/2012

y al copiarlo y pegarlo en la otra hoja lo pasa así,

11/12/2012

como se puede comprobar no es la misma fecha ni el mismo valor númerico, pero solo ocurre con el primer dia, el siguiente dia si lo pone bien, como,

13/11/2012 pero en formato texto pues entiendo que el mes 13 no existe y lo interpreta como texto llano.

Todo esto ocurre cuando se ejecuta la siguiente macro, pondré solo el fragmento donde llama a citrix


.....
Workbooks.Open Filename:=c:\citrix.xls 'Ubicacion ficticia donde se encuentra el archivo de datos
Workbooks("citrix.xls").Activate
Cells.Select
Selection.Copy
Workbooks(nombrelibro).Sheets("Datos").Visible = True
Workbooks(nombrelibro).Sheets("Datos").Activate
Cells.Select
ActiveSheet.Paste
Workbooks("citrix.xls").Close savechanges:=False 'evito guardar al cerrar para que no me muestre la imagen que he agregado a este mensaje mas abajo
Call ejec 'llama la siguiente macro
....
[/CODE]

Después de mucho investigar hiendo linea a linea llegue a la conclución, que si el archivo citrix.xls se abre de forma MANUAL neutralizando la linea

[CODE]'Workbooks.Open Filename:=c:\citrix.xls[/CODE]

y se ejecuta la macro

el copiado y pegado lo hace correctamente incluso el formato de fecha corresponde con el debe ser y todo lo hace perfectamente bien como lo quiero.

Pero si dejo que sea la linea neutralizada [b]Workbooks.Open Filename:=c:\citrix.xls[/b] la que abra el archivo, lo copia y pega mal.

[u]

[i]¿ Habría alguna manera de abrir dicho archivo mediante VBA que no sea de la manera citada para que los datos los trate como debería?[/i][/u]

Por si vale de algo adjunto imagen,

[ATTACH]34951.vB[/ATTACH]

Este mensaje aparece si el archivo adjunto es nuevamente guardado, osea si se intenta modificar y guardar, supongo que es por donde erradica todo el problema.

Si la solución es que el programa que crea el archivo citrix.xls lo guarde en otro formato, la respuesta es que no es posible pues he de trabajar con lo que crea, si no hay solución tendre que hacerlo de forma manual, abriendo el archivo de forma manual para que los datos sean cogidos correctamente.

Gracias y perdonar por las molestias.

citrix.xls

post-106921-145877006438_thumb.jpg

publicado

Hola

Ojalá te sirva aun algún tipo de ayuda, me paso por aquí tratando de ayudar, porque siempre consulto, pero pocas veces posteo lo que voy descubriendo, no soy un experto, pero he ido aprendiendo varios truquitos en el camino.

Mira yo para abrir otros archivos uso este código:

ruta = "C:\Mis Documentos\Archivos\"

nombre = "Libro1"

ext = ".xls"

Dim wBook As Workbook

On Error Resume Next

Set wBook = Workbooks(nombre)

If wBook Is Nothing Then

Workbooks.Open ruta & nombre & ext

Else

Windows(nombre).Activate

End If

donde a las variables "nombre", "ruta" y "ext" también se pueden referenciar a celdas, lo hago así por si cambia el formato de un archivo o en la planilla alguien cambia la ubicación de esas celdas o alguien le cambia el nombre al arcvhivo, por ejemplo uso algo como: nombre = Cells(2,5).value

Para abrirlo como solo lectura y que no me pregunte cosas, le pongo luego de "Workbooks.Open ruta & nombre & ext" las instrucciones para que lo abra sin actualizar vinculos, como de solo lectura: "Workbooks.Open ruta & nombre & ext, 0, 1" (sin las comillas), incluso a los archivos que tengo protegidos con contraseñas, puedo hacer q la misma macro la escriba por mi jeje...

Y bueno para pegar y que no cambie los formatos, en vez de Activesheet.Paste, utilizo esta línea, con lo que pega solo valores y mantiene el formato de la planilla de destino:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False

Ojalá te sirva, a mi me han ayudado de mucho esas líneas...

Saludos desde Chile...

Invitado Cacho R
publicado

Hola! Oliver. Podrías intentar con lo siguiente:

Const ubicación$ = "C:\"

With ThisWorkbook.Sheets("Datos")
.Visible = True
Application.Goto .[a1]

Workbooks.OpenText Filename:=ubicación & "citrix.xls", Origin:=xlWindows, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 4), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _
Array(6, 1), Array(7, 1))

ActiveSheet.[a1].CurrentRegion.Copy .[a1]
ActiveWorkbook.Close False
End With[/PHP]

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.