Ayuda para actualizar datos en libro remoto mediante VB

24/06/2004 - 17:17 por Rantamplan | Informe spam
Hola de nuevo, despues de leer acerca de como vincular datos pertenecientes
a diferentes libros que se encuentran en diferentes pc's, os paso a
formular mi problema por si alguno puede echarme una mano:

Tengo un pc (A) que todos los dias genera un informe en excel con el
siguiente formato: 24062004.xls (es la fecha del dia actual en formato
ddmmyyyy).

Tengo otro pc (B) con un informe realizado en excel que necesita recopilar
datos de ciertas celdas de A. Por ejemplo necesito saber los valores
actuales de las celdas A1,A2,A3 (ojo! digo los valores actuales pq como
cada dia se genera un archivo distinto, necesito que siempre vaya a
consultar el mas reciente!).

Medio peleandome con el vb que trae excel he llegado a realizar esta
'cutre-macro' :

-
Dim fecha_remota, hoy
Dim archivo_origen, archivo_remoto

hoy = Mid(Now, 1, 2) + Mid(Now, 4, 2) + Mid(Now, 7, 4)

archivo_remoto = "m:\" + Mid(Now, 1, 2) + Mid(Now, 4, 2) + Mid(Now, 7,
4) + ".xls"
fecha_remota = Mid(archivo_remoto, 4, 8)
If hoy = fecha_remota Then
.ActiveWorkbook.ActiveSheet.Select
.Goto reference:=.Range("a1")
.Selection =('"M:\"+fecha_remota+".xls"libro1'!A1) 'NO FUNCIONA¿?
Else
ActiveSheet.Range("a1").Value = "error, no se encuentra el dato"
End If
-

El archivo de A (el local) se llama: c:\informe.xls
El archivo de B (el remoto) se llama: m:\24062004.xls

Socorroooooo!! por favor, a ver si alguien me ilumina ;-)

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
27/06/2004 - 04:30 | Informe spam
¿que tal, chicos?

Rantamplan escribio en el mensaje
... vincular datos pertenecientes a diferentes libros que se encuentran en diferentes pc's [...]
... pc (A) que todos los dias genera un informe en excel con el ... formato: 24062004.xls [...]
... pc (B) con un informe ... que necesita recopilar ... de ciertas celdas de A.
... saber los valores actuales de las celdas A1,A2,A3
(ojo! digo los valores actuales ... cada dia se genera un archivo ... siempre ... consultar el mas reciente!)
... peleandome con el vb ... he llegado a realizar esta 'cutre-macro' [... sigue macro ...]

David Canales escribio en el mensaje
... mas practico, en vez de hacer una macro ... lo siguiente [...]
- Escribe en la celda F1 (o la de tu preferencia) [...]
- En F2 [...]
- En F3 [...]
- En F4 [...]
- En F5 [...]
... vamos a usar ... indirect.ext ... al instalar un add-in ... que tiene 41 funciones adicionales [...]
- ... en la celda F9 escribe =indirect.ext(F5, false) [...]





1° ciertamente que el complemento tiene 40+ funciones muy 'utiles' [todas, pero... NO 'de uso frecuente' :(]
2° [me parece que...] son 'muchos pasos' =>para cada celda<= que se quiera 'vincular' :((
[Rantamplan 'ejemplifico' -solamente- 3, pero... ¿y si fueran 100 o mas???]
3° [creo yo que...] en 'este' caso... si resulta mas 'conveniente' usar macros [expongo un ejemplo al final] ;)
4° =>David Canales<=: disculpame [si llegara a parecerte 'pesado'] pero...
'seria bueno' que usaras 'texto plano' [NO formatos html] en tus respuestas y mensajes [=>menor 'tamaño'<=]

saludos,
hector.
-
la siguiente macro, 'busca' [hasta 4 dias 'atras'] el archivo de fecha 'mas reciente'.
una vez 'encontrado'... 'pasa' los valores de las [3] celdas [de 'ese' archivo] en las [3] celdas de la hoja 'x' del libro 'y'
1° 'haciendo' un vinculo 'real' hacia ellas y...
2° 'rompiendo' ese vinculo [convirtiendo los valores 'extraidos' a sus valores 'finales' EN cada celda 'destino']
[si deseas 'conservar' el vinculo... elimina la linea que 'dice': =>.Value = .Value<=]
en un modulo de codigo 'normal' ==Sub Traer_Datos_De_Archivo_Reciente()
Dim Sig As Integer, PC_Remota As String, Archivo_Reciente As String, Hoja As String
PC_Remota = "M:\"
For Sig = 0 To 3
Archivo_Reciente = Format(Date - Sig, "ddmmyyyy") & ".xls"
If Dir(PC_Remota & Archivo_Reciente) <> "" Then Exit For
Next
If Dir(PC_Remota & Archivo_Reciente) = "" Then Exit Sub
Hoja = "Hoja1"
For Sig = 1 To 3
With Worksheets(1).Range("a" & Sig)
.Formula = "='" & PC_Remota & "[" & Archivo_Reciente & "]" & Hoja & "'!a" & Sig
.Value = .Value
End With
Next
End Sub
Respuesta Responder a este mensaje
#2 Rantamplan
28/06/2004 - 11:27 | Informe spam
Héctor Miguel Escribió el día dom 27
jun 2004 04:30:41a:

¿que tal, chicos?

Rantamplan escribio en el mensaje
... vincular datos pertenecientes a diferentes libros que se
encuentran en diferentes pc's [...] ... pc (A) que todos los dias
genera un informe en excel con el ... formato: 24062004.xls [...]
... pc (B) con un informe ... que necesita recopilar ... de ciertas
celdas de A. ... saber los valores actuales de las celdas A1,A2,A3
(ojo! digo los valores actuales ... cada dia se genera un archivo ...
siempre ... consultar el mas reciente!) ... peleandome con el vb ...
he llegado a realizar esta 'cutre-macro' [... sigue macro ...]



David Canales escribio en el mensaje
... mas practico, en vez de hacer una macro ... lo siguiente [...]
- Escribe en la celda F1 (o la de tu preferencia) [...]
- En F2 [...]
- En F3 [...]
- En F4 [...]
- En F5 [...]
... vamos a usar ... indirect.ext ... al instalar un add-in ... que
tiene 41 funciones adicionales [...] - ... en la celda F9 escribe
=indirect.ext(F5, false) [...]





1° ciertamente que el complemento tiene 40+ funciones muy 'utiles'
[todas, pero... NO 'de uso frecuente' :(] 2° [me parece que...] son
'muchos pasos' =>para cada celda<= que se quiera 'vincular' :((
[Rantamplan 'ejemplifico' -solamente- 3, pero... ¿y si fueran 100
o mas???]
3° [creo yo que...] en 'este' caso... si resulta mas 'conveniente'
usar macros [expongo un ejemplo al final] ;) 4° =>David Canales<=:
disculpame [si llegara a parecerte 'pesado'] pero...
'seria bueno' que usaras 'texto plano' [NO formatos html] en tus
respuestas y mensajes [=>menor 'tamaño'<=]

saludos,
hector.
-
la siguiente macro, 'busca' [hasta 4 dias 'atras'] el archivo de fecha
'mas reciente'. una vez 'encontrado'... 'pasa' los valores de las [3]
celdas [de 'ese' archivo] en las [3] celdas de la hoja 'x' del libro
'y' 1° 'haciendo' un vinculo 'real' hacia ellas y...
2° 'rompiendo' ese vinculo [convirtiendo los valores 'extraidos' a sus
valores 'finales' EN cada celda 'destino']
[si deseas 'conservar' el vinculo... elimina la linea que 'dice':
=>.Value = .Value<=]
en un modulo de codigo 'normal' ==> Sub Traer_Datos_De_Archivo_Reciente()
Dim Sig As Integer, PC_Remota As String, Archivo_Reciente As String,
Hoja As String PC_Remota = "M:\"
For Sig = 0 To 3
Archivo_Reciente = Format(Date - Sig, "ddmmyyyy") & ".xls"
If Dir(PC_Remota & Archivo_Reciente) <> "" Then Exit For
Next
If Dir(PC_Remota & Archivo_Reciente) = "" Then Exit Sub
Hoja = "Hoja1"
For Sig = 1 To 3
With Worksheets(1).Range("a" & Sig)
.Formula = "='" & PC_Remota & "[" & Archivo_Reciente & "]" &
Hoja & "'!a" & Sig .Value = .Value
End With
Next
End Sub




Muchas gracias a los dos por contestar!!

Peleandome con el vb he llegado a conseguir esto:

Public Sub solidos()
Dim hoy, archivo_remoto, fecha_remota

'calculamos la fecha actual en formato ddmmyyyy
hoy = Mid(Now, 1, 2) + "0" + Mid(Now, 4, 1) + Mid(Now, 6, 4)
ActiveSheet.Range("b8").Value = hoy

'ruta completa del archivo remoto
archivo_remoto = "e:\" + hoy + ".xls"
ActiveSheet.Range("b10").Value = archivo_remoto

If archivo_remoto = Null Then
MsgBox ("No se encuentra ningun fichero")
Else
ActiveSheet.Range("b15").Value = "='" + [archivo_remoto] + "'!a1"
ActiveSheet.Range("b17").Value = "='" + [archivo_remoto] + "'!a2"
ActiveSheet.Range("b19").Value = "='" + [archivo_remoto] + "'!a3"
ActiveSheet.Range("b21").Value = "='" + [archivo_remoto] + "'!a4"
ActiveSheet.Range("b23").Value = "='" + [archivo_remoto] + "'!a5"
MsgBox ("Actualizacion realizada con exito")
End If
End Sub


Después he grabado una macro para que ejecute el codigo anterior de forma
automatica cada vez que se habre el informe:

Sub Auto_Open()
'
' Informe Macro
'

'
Application.Run "informe.xls!Hoja1.solidos"
End Sub

Si podeis, comentarme a ver que os parece mi codigo... yo mientras tanto
porbare las dos opciones que me habeis aconsejado.

Muchas gracias por las respuestas!!

Salu2!.
Respuesta Responder a este mensaje
#3 Rantamplan
28/06/2004 - 11:49 | Informe spam
Rantamplan Escribió el día lun 28 jun 2004
11:27:26a:

Héctor Miguel Escribió el día dom 27
jun 2004 04:30:41a:

¿que tal, chicos?

Rantamplan escribio en el mensaje
... vincular datos pertenecientes a diferentes libros que se
encuentran en diferentes pc's [...] ... pc (A) que todos los dias
genera un informe en excel con el ... formato: 24062004.xls [...]
... pc (B) con un informe ... que necesita recopilar ... de ciertas
celdas de A. ... saber los valores actuales de las celdas A1,A2,A3
(ojo! digo los valores actuales ... cada dia se genera un archivo
... siempre ... consultar el mas reciente!) ... peleandome con el vb
... he llegado a realizar esta 'cutre-macro' [... sigue macro ...]



David Canales escribio en el mensaje
... mas practico, en vez de hacer una macro ... lo siguiente [...]
- Escribe en la celda F1 (o la de tu preferencia) [...]
- En F2 [...]
- En F3 [...]
- En F4 [...]
- En F5 [...]
... vamos a usar ... indirect.ext ... al instalar un add-in ... que
tiene 41 funciones adicionales [...] - ... en la celda F9 escribe
=indirect.ext(F5, false) [...]





1° ciertamente que el complemento tiene 40+ funciones muy 'utiles'
[todas, pero... NO 'de uso frecuente' :(] 2° [me parece que...] son
'muchos pasos' =>para cada celda<= que se quiera 'vincular' :((
[Rantamplan 'ejemplifico' -solamente- 3, pero... ¿y si fueran 100
o mas???]
3° [creo yo que...] en 'este' caso... si resulta mas 'conveniente'
usar macros [expongo un ejemplo al final] ;) 4° =>David Canales<=:
disculpame [si llegara a parecerte 'pesado'] pero...
'seria bueno' que usaras 'texto plano' [NO formatos html] en tus
respuestas y mensajes [=>menor 'tamaño'<=]

saludos,
hector.
-
la siguiente macro, 'busca' [hasta 4 dias 'atras'] el archivo de
fecha 'mas reciente'. una vez 'encontrado'... 'pasa' los valores de
las [3] celdas [de 'ese' archivo] en las [3] celdas de la hoja 'x'
del libro 'y' 1° 'haciendo' un vinculo 'real' hacia ellas y...
2° 'rompiendo' ese vinculo [convirtiendo los valores 'extraidos' a
sus valores 'finales' EN cada celda 'destino']
[si deseas 'conservar' el vinculo... elimina la linea que 'dice':
=>.Value = .Value<=]
en un modulo de codigo 'normal' ==>> Sub Traer_Datos_De_Archivo_Reciente()
Dim Sig As Integer, PC_Remota As String, Archivo_Reciente As
String, Hoja As String PC_Remota = "M:\"
For Sig = 0 To 3
Archivo_Reciente = Format(Date - Sig, "ddmmyyyy") & ".xls"
If Dir(PC_Remota & Archivo_Reciente) <> "" Then Exit For
Next
If Dir(PC_Remota & Archivo_Reciente) = "" Then Exit Sub
Hoja = "Hoja1"
For Sig = 1 To 3
With Worksheets(1).Range("a" & Sig)
.Formula = "='" & PC_Remota & "[" & Archivo_Reciente & "]" &
Hoja & "'!a" & Sig .Value = .Value
End With
Next
End Sub




Muchas gracias a los dos por contestar!!

Peleandome con el vb he llegado a conseguir esto:

Public Sub solidos()
Dim hoy, archivo_remoto, fecha_remota

'calculamos la fecha actual en formato ddmmyyyy
hoy = Mid(Now, 1, 2) + "0" + Mid(Now, 4, 1) + Mid(Now, 6, 4)
ActiveSheet.Range("b8").Value = hoy

'ruta completa del archivo remoto
archivo_remoto = "e:\" + hoy + ".xls"
ActiveSheet.Range("b10").Value = archivo_remoto

If archivo_remoto = Null Then
MsgBox ("No se encuentra ningun fichero")
Else
ActiveSheet.Range("b15").Value = "='" + [archivo_remoto] +
"'!a1" ActiveSheet.Range("b17").Value = "='" +
[archivo_remoto] + "'!a2"tiveSheet.Range("b19").Value > "='" + [archivo_remoto] + "'!a3"
ActiveSheet.Range("b21").Value = "='" + [archivo_remoto] +
"'!a4" ActiveSheet.Range("b23").Value = "='" +
[archivo_remoto] + "'!a5" MsgBox ("Actualizacion realizada con
exito")
End If
End Sub


Después he grabado una macro para que ejecute el codigo anterior de
forma automatica cada vez que se habre el informe:

Sub Auto_Open()
'
' Informe Macro
'

'
Application.Run "informe.xls!Hoja1.solidos"
End Sub

Si podeis, comentarme a ver que os parece mi codigo... yo mientras
tanto porbare las dos opciones que me habeis aconsejado.

Muchas gracias por las respuestas!!

Salu2!.




Ah! se me olvidaba comentar qu com ose ve en el codigo, hay unos pequeños
detalles que cambian respecto a mi plantemaiento original, como que la
unidad remota es 'e:\' en vez de 'm:\' y que he cambiado el nombre de la
hoja por otro diferente.
Tambien se puede observar que hay celdas en las que escribo la fecha
actual.
Son a modo de pruebas mias, espero no haberos liado ;-)

Por cierto, he seguido el codigo de Hector y me funciona a las mil
maravillas! Thanks ;-)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida