ejecutar procedimiento teniendo su nombre(como string)

29/12/2006 - 02:03 por Ivan | Informe spam
hola a todos

estoy intentando una cosa que no se si es posible (de momento no lo
consigo)

se trata de ejecutar un procedimiento tomando su nombre de una celda, o
de una variable que lo tome de esta

Algo asi como 'Call .[a1].value', o mimacro=.[a1]: call mimacro, pero
me da error.

Sin embargo, y si no me equivoco, esto si es valido para la propiedad
OnAction de los comandos de barras de herramientas -> mimacro=.[a1]:
.OnAction=mimacro

he estado indagando a partir de ->
Application.VBE.ActiveCodePane.CodeModule. -> pero no he llegado a
ningun lado

¿existe algun modo de referirse a los procedimientos que no sea su
nombre directamente?¿son/pueden considerarse un objeto, con su
respectiva coleccion contenedora?, y de ser asi, ¿cual es su nombre y
como se podria recorrer esta?

bueno, no se si me he explicado, pero si me podeis echar un nueva mano,
os lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#6 Ivan
05/01/2007 - 03:32 | Informe spam
hola de nuevo, Vinchenzo

lo primero disculpa la tardanza, pero estos dias son para mi los de
mayor curro de todo el año, y cuando me pongo ante este trasto no
suele quedarme mucha energia en la neurona para afrontar cosas 'serias'

si tienes tiempo te comento lo que he ido viendo (aunque no he podido
dedicarle mucho tiempo).

1º en cuanto a callByName no consigo ejecuatlo tal y como lo propones
(me da el error "No coinciden los tipos", error de compilacion) con el
modulo ->

CallByName Módulo1, [a1].Value, vbMethod -> el error me señala
Módulo1 (2 en mi caso)

es como si lo considerara un string en vez de un objeto. He intentado
ponerlo con toda la ''''ruta'''' ->
Thisworkbook.VBProject.VbComponents. pero creo que no lo hago
correctamente y sigue dandome agun tipo de error. Supongo que en algo
estoy metiendo la pata

2º he estado probando 'SaveSetting', 'GetSetting', etc, y parecen ir
muy bien (aunque en cuanto me he salido un poco de tu
planteamiento/codigos me he vuelto a 'enmarronar',pero supongo que
con mas calma ire viendo algo mas), pero me ha surgido una duda ->

¿el hecho de cargar en el registro determinadas propiedades del
archivo puede hacerlo mas vulnerable, a la hora sobre todo de romper
sus hipoteticas protecciones?, entre otras cosas uno de los datos que
se guardaria serian las claves que dan acceso al usuario a determinados
procesos, o en su defecto el valor/nivel de proteccion elegido por el
propio usuario.(o mejor dicho el valor de los controles que lo definen)

Tampoco es que importara mucho, pues la mayor parte de las posibles
protecciones de este archivo estarian destinados a prevenir
errores/torpezas mas que a posibles intrusiones premeditadas, pero si
me ha picado un poco la curiosidad, de cara sobre todo a futuras
posibilidades

bueno, la verdad es que me han surjido unas cuantas dudas mas, pero
creo que ocuparian demasiado, aparte de que sin dedicarle un poco mas
de tiempo tampoco sabria definirlas del todo. En cualquier caso, el dia
6 comienza mi año nuevo real y espero poder dedicarle un poco mas de
tiempo

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#7 Vinchenzo vinç
08/01/2007 - 19:49 | Informe spam
"Ivan" <@> escribió en el mensaje news:


1º en cuanto a callByName no consigo ejecuatlo tal y como lo propones
(me da el error "No coinciden los tipos", error de compilacion) con el
modulo ->

CallByName Módulo1, [a1].Value, vbMethod -> el error me señala
Módulo1 (2 en mi caso)

es como si lo considerara un string en vez de un objeto. He intentado
ponerlo con toda la ''''ruta'''' ->
Thisworkbook.VBProject.VbComponents. pero creo que no lo hago
correctamente y sigue dandome agun tipo de error. Supongo que en algo
estoy metiendo la pata



Hola Iván,
disculpa, pero en verdad no estás metiendo la pata en nada, porque eso ya lo he hecho yo primero. Mea culpa.

Todavía no consigo explicarme lo que me sucedió (sí sé que no fue por embriaguez), es una sensación extraña como cuando experimentas paramnesia (un 'déjà vu'). Te aseguro que si me hubiesen preguntado, hubiese jurado por lo más sagrado que eso funcionaba, ya que estaba completamente convencido de que esa instrucción la había comprobado antes de responderte (y lo "recuerdo" como si fuese ahora mismo, ...pero está claro que eso es imposible (o eso creo..., no sé..., pero no, no puede ser...)) :-S

En fin, que sea como sea no pudo ser así, un módulo estándar no es un objeto para poder ser pasado a 'CallByName'. Para lo demás comentado sí, cuando hablamos de objetos Worksheet, Workbook, Cell, UserForm, TextBox, etc etc...

Perdona la confusión.


2º he estado probando 'SaveSetting', 'GetSetting', etc, y parecen ir
muy bien (aunque en cuanto me he salido un poco de tu
planteamiento/codigos me he vuelto a 'enmarronar',pero supongo que
con mas calma ire viendo algo mas),



Cuando hayas hecho unas pocas pruebas con ellas, verás que son realmente sencillas de usar (aunque si en algún punto te causaran mucho quebradero, siempre puedes preguntar). Simplemente te sugiero que tengas abierto el editor del Registro (RegEdit.exe), te situas en la clave que te comenté 'VB and VBA Program Settings', y mientras pruebas vas actualizando (Ver>Actualizar [F5], del RegEdit) para ver los resultados de las operaciones que vayas probando.
Tan sólo ten la precaución de no usar el nombre de una clave ya existente que no sea la tuya ;-)
Por lo demás, tranquilo, porque al resto del Registro no tendrás acceso con estas funciones, así que no podrás estropear nada crítico haciendo pruebas.


pero me ha surgido una duda ->
¿el hecho de cargar en el registro determinadas propiedades del
archivo puede hacerlo mas vulnerable, a la hora sobre todo de romper
sus hipoteticas protecciones?, entre otras cosas uno de los datos que
se guardaria serian las claves que dan acceso al usuario ...



Pienso que no por el hecho de guardarlas en el registro habrá más vulnerabilidad, siempre lo será dependiendo de cómo se almacene esa cierta información, sea donde sea que se almacene.
En principio, el hecho de guardar las claves (aunque estén cifradas) es mala idea, y no sólo en el Registro de Windows, sino en cualquier lugar. La clave no debería existir "físicamente" en ningún lugar, ni en el código fuente, ni en una hoja del libro (ni oculta), ni en un fichero externo, ...
Se debería almacenar únicamente un criptograma, resultado de aplicar la clave de cifrado sobre un texto, como el nombre de usuario, donde la clave de cifrado sería la contraseña introducida por el usuario.

Estaremos de acuerdo en que cuando un usuario quiera entrar en una sección restringida de la aplicación, deberá escribir su nombre de usuario y su contraseña en el formulario que hayas creado para tal, y aplicándole el mismo algoritmo de cifrado que generó su cuenta, comparas el criptograma actual con el almacenado. Es decir, que la contraseña debería ser un valor «irrecuperable» desde el punto de vista de la aplicación.
Evidentemente, dada la baja seguridad que Excel puede darle al código fuente de un proyecto en el entorno de VBA, lo bueno sería encapsular el algoritmo en una librería dinámica, en lugar de en el libro.

Precisamente, si te diriges a la sección «Componentes» de la página del colega Rubén Vigón http://vigon.mvps.org/, encontrarás la librería "VCrypto 2.1" http://vigon.mvps.org/descargas/vcrypto2.zip (16 KB)
Se trata de una DLL que podrás instanciar desde tu código fuente, y usar un algoritmo de cifrado o un generador de clave Hash, un GUID, o cadenas alfanuméricas aleatorias.
El único inconveniente (si se le puede llamar así) es que la librería deberá "acompañar" a tu libro (si está previsto usarlo desde otras máquinas), y estar registrada en el equipo (es relativamente fácil automatizar esta tarea, te extraeré una función que se encarga de intentar verificar si cierto componente requerido se encuentra en el equipo, y si no lo está trata de registrarlo sin intervención del usuario).

También es evidente que -informáticamente hablando- no hay sistema "seguro", simplemente se busca la forma de ponerlo más difícil a personal no autorizado o a quien quiera apropiarse indebidamente de información reservada.
Suele ser habitual que se rompa la seguridad más por la mala calidad de las contraseñas que elige el usuario (como nombres propios -incluso usando el mismo nombre de usuario para la contraseña, o el mismo pero invertido-, o fechas de aniversarios, claves de longitud demasiado corta, hasta por la imprudencia de algunas personas que se anotan las constraseñas en papeles, post-it, o ficheros de texto) que no por el hecho de un ataque automatizado contra el sistema.

Para aumentar un poco la seguridad en tu sistema (en realidad, dificultar las intrusiones), la aplicación de tu libro debería obligar al usuario a crear una clave no inferior a 6 o 7 caracteres, y definir un procedimiento de transformación interno para los nombres de usuario (quizá también para la clave), de forma que tu sistema debería generar "secretamente" una mutación preestablecida de la cadena para obtener una distinta a la de entrada, y basar el cifrado sobre ellas. Puede dificultar por ejemplo un ataque externo por 'fuerza bruta' en el que únicamente conocieran el texto cifrado desde el RegEdit.
También disponer un cambio de contraseña periódico, y denegar la opción de pegar 'Ctrl+V' la contraseña en el TextBox (un usuario autorizado tiene la obligación de conocer -y escribir manualmente- su clave de acceso) lo que pasa es que los tenemos muy mal acostumbrados a dejarles hacer lo que quieren :-)
Además intentar controlar si cambia el contenido de la caja de texto de la clave sin que se hayan pulsado teclas, o sin ser esa caja de texto el control activo en el formulario, pues indicaría que lo está modificando una aplicación externa...

...y todo lo que se te pueda ocurrir. El esfuerzo tendría que ser proporcional a la importancia de la información que no debe ser pública...


Saludos
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/micr...c.es.excel
( i ) Temperancia en el foro:
http://support.microsoft.com/defaul...newsreglas
Respuesta Responder a este mensaje
#8 Ivan
08/01/2007 - 22:19 | Informe spam
hola Vinchenzo, muchas gracias de nuevo por tu ayuda

en lo que se refiere a CallByName, no te preocupes, no hay nada que
perdonar. No solo me ha servido para conocerla, sino que ademas creo
que me vendran muy bien (digo yo que algo se me quedara) las vueltas
que me he dado por los componentes de vba para intentar resolver el
error. Y, dado que como ya te he comentado en otras ocasiones, mi
objetivo final/real es el aprendizaje, cualquier novedad o
inconveniente suele resultar bastante mas instructiva que el simple
copiar/aplicar una ayuda.

Aparte de que la situacion me resulta totalmente familiar (y hablo de
mi, aunque no creo que nadie se libre ...)

en cuanto al resto, muchas gracias de nuevo. Voy a echarle un ojo a los
enlaces ( ¡¡¡¡¡ Encriptacion !!!!! ) a ver lo que saco en claro.
Aunque como te comentaba, el archivo, al menos inicialmente, no creo
que necesite excesiva proteccion contra intrusos ( al fin y al cabo
todo lo que va a contener me lo habeis facilitado vosotros con vuestras
ayudas desinteresadas y estaria disponible para quien quisiera ver el
codigo ) entre otras cosas porque lo que contendra sera codigo de
principiante.

Pero es cierto que no me gustaria que alguien con mala leche
(improbable) pudiera manipularlo y afectar al resto de usuarios. Para
que lo entiendas te describo el proyecto brevemente.

inicialmente se trataba de mantener unida (virtualmente) una biblioteca
(de libros de papel) bastante amplia heredada por seis hermanos, un
poco como recordatorio, un poco como cosa practica, facilitando la
disponbilidad de cualquier libro a cualquiera de ellos.

Para ello pense en un libro de excel, con algun formulario sencillo de
introduccion de datos, etc pero claro, el vicio es el vicio, y la
cosa fue creciendo, tanto en componentes como en la propia idea

actualmente la idea es distribuirla tambien entre amigos, amigos de los
amigos, y en general quien pudiera estar interesado (por supuesto
gratuitamente) y se trataria de un archivo con una doble 'biblioteca',
la original y la propia de cada usuario. En esta ultima no habria
practicamente ninguna restriccion mas que las que quiera imponer el
propio usuario (claves de acceso, otros usuarios autorizados, etc)
mediante un formulario de opciones de usuario.

en cuanto a la primera, seria de acceso de solo lectura para todos,
incluidos nosotros, excepto en lo que se refiere a los libros que cada
uno tendria. Igualmente cualquiera (hermano o no) podria aportar libros
( a nivel virtual, para poder consultar datos, contactar, o lo que cada
'aportador' quisiera). En estos casos el aportador tendria acceso a la
modificacion/retirada de los libros aportados por el. Ante cada cambio
(aportacion, retirada, modificacion..) realizado se generaria una
actualizacion que, a traves de mi ordenador (actuando a modo de
central, servidor, o no se como llamarlo, y de una forma que me
gustaria conseguir fuese practicamente automatica ) actualizaria a su
vez al resto de usuarios.

esta, basicamente, es la idea general (luego esta conpuesto por
diversos formularios y utilidades para trabajar con los libros y fichas
y seria largo de explicar, pero si estas interesado en echarle un ojo
cuando consiga reconstruirlo (que no se muy bien cuando sera) no tendre
ningun inconveniente en hacertelo llegar)

todo esto es para que te hagas una idea de la proteccion que requriria,
que iria sobre todo encaminada a evitar que alguna posible
actualizacion (pej) pudiera crear un destrozo en mas de un archivo o
equipo

bueno, disculpa el rollo, pero asi te haras una idea de mas o menos lo
que ando buscando

gracias de nuevo y un cordial saludo
Ivan

PD >>> El único inconveniente (si se le puede llamar así) es que la
librería deberá "acompañar" a tu libro (si está previsto usarlo
desde otras máquinas), y estar registrada en el equipo (es
relativamente fácil automatizar esta tarea, te extraeré una función
que se encarga de intentar verificar si cierto componente requerido se
encuentra en el equipo, y si no lo está trata de registrarlo sin
intervención del usuario).>>>

si tienes tiempo si te agradeceria esa funcion, pues, aparte de este
caso, supongo que seria aplicable tambien en muchas otras situaciones.
De hecho, otra de mis dudas actuales tiene algo que ver. Se trata de
instalar el archivo en un determinado directorio, aunque ni siquiera he
empezado a mirarlo y quizas no sea complicado (aparte de ser otro tema
diferente)

hasta pronto
Respuesta Responder a este mensaje
#9 Vinchenzo vinç
13/01/2007 - 22:00 | Informe spam
Hola Iván,
Baltasar se retrasó y mi "juguete" llegó esta semana :-) He comprado el Visual Studio 2005, y bueno, ya sabes lo que es tener una herramienta nueva entre las manos, no podía parar de toquetearlo todo.


el archivo, al menos inicialmente,
no creo que necesite excesiva proteccion...
...
Pero es cierto que no me gustaria que alguien con mala leche
(**improbable**) pudiera manipularlo y afectar al resto de usuarios



Siempre es muy frecuente que no se sepa con total certeza quién acabará usando la aplicación, ni el nivel de conocimientos informáticos de esas personas, ni de sus intenciones, lógicamente.
Particularmente siempre intento programar imaginando el peor de los escenarios, donde me preocupan más los usuarios que desconocen la informática o tienen un nivel de conocimientos básico, pues hay que tratar de "ayudarles" para que sus involuntarios errores no se conviertan en un malfuncionamiento de la aplicación.

Si todavía no te has encontrado, tarde o temprando te encontrarás con usuarios a los que una etiqueta les solicita escribir una cantidad numérica en una caja de texto, y se empeñarán en introducir "pepito", "cinco", espacios en blanco... (muchos ni siquiera leen la totalidad del texto de etiquetas informativas).
A todos estos y otros 'pequeños detalles' les intento dar solución antes de que sucedan (por aquello de Edward Murphy), porque -como te decía- dejando a parte los malintencionados, hay usuarios que simplemente son todavía inexpertos en la tecnología informática, no es culpa suya, pero son precisamente los mejores "beta-testers" de tu aplicación, si hay un error no controlado, lo sacarán a la luz :-))

Por consiguiente creo que es buena idea 'reducir riesgos' (de la naturaleza que sea).
Míralo de esta forma, entremos en el supuesto que, de alguna manera, un UsuarioX acaba usando la cuenta del Usuario1 de tu aplicación, le modifica sus configuraciones y/o registros de retirada, aportes o modificación de esos "libros virtuales" que les gestionará tu aplicación. Cuando ese Usuario1 se lo encuentre "patas arriba" vendrá a pedirte explicaciones a tí, ya que sabrá sobradamente que él no fue, y te echará en cara que, o tu aplicación no funciona correctamente, o tu aplicación permitió que otro tuviera acceso a su «área privada» (que evidentemente también indicaría que no funciona correctamente). En definitiva, siempre serías tú quien acabara pagando el pato (incluso si la aplicación será para conocidos y amigos, que dependiendo del "desastre" quizá los pierdas).


Para que lo entiendas te describo el proyecto brevemente
[...]
inicialmente se trataba de mantener unida (virtualmente) una biblioteca
(de libros de papel) bastante amplia heredada por *seis hermanos*...



Seis, mucho riesgo.

...
actualmente la idea es distribuirla tambien entre amigos, amigos de los
amigos, y en general quien pudiera estar interesado...



Uff, ídem de ídem ;-)


[...]
si estas interesado en echarle un ojo
cuando consiga reconstruirlo (que no se muy bien cuando sera) no tendre
ningun inconveniente en hacertelo llegar)



Si no te causará inconvenientes, sí me gustará poder verlo cuando lo consideres oportuno.


PD >>>
la librería deberá "acompañar" a tu libro ... y estar registrada en el equipo



si tienes tiempo si te agradeceria esa funcion, pues, aparte de este
caso, supongo que seria aplicable tambien en muchas otras situaciones.



La siguiente función la creé inicialmente para el trabajo con ficheros de inicialización '.Ini', en la que usaba una Dll que encapsulaba las funciones de la API de Windows relacionadas con la manipulación de dichos ficheros, y unas pocas funcionalidades extra personalizadas. Poco a poco fue sufriendo ligeros cambios y mejoras (gracias también a conversaciones en los grupos de discusión de Visual Basic) para un propósito más general, pero para mi caso.

Es por ello que nunca la he dado por terminada. Siempre estoy abierto a críticas y sugerencias.

Descrita brevemente, es una función recursiva que realiza 'N' intentos de instanciación -y registro, si falla- de una clase de una librería dada.
Está basada en realizar un primer intento de instanciar la clase, si no se produce ningún error sale devolviendo True. Si se produce error por no poder crear el objeto, esta función intenta registrar el componente y vuelve a llamarse, contemplando tres intentos de registro. El primer intento presupone que la librería está copiada en el directorio del sistema, el segundo trata de localizar el fichero en la ruta en la que se encuentra el libro, y el último intenta localizar el fichero en la carpeta que suelo tener para componentes inherentes al libro de trabajo, la subcarpeta "ActiveXs" del directorio del libro.

Vamos a suponer que en tu caso quieras usar la clase de encriptación de la librería de Rubén, "CEncriptador", y que antes de abrir el formulario quieres verificar si existe el componente encargado de gestionar la seguridad de la aplicación "VCrypto2.dll". La carga del formulario podría ser similar a como sigue:

'**************
Private Sub UserForm_Initialize()
If IsActiveXAlive("VCrypto2.dll", "VCrypto2.CEncriptador") = False Then
MsgBox "No se encuentra el componente requerido." & vbCrLf & "La aplicación no puede continuar, consulte al administrador.", vbCritical
End
End If
End Sub
'**************

Una de las posibles implementaciones de la función podría ser la siguiente (aparenta ser larga por los comentarios, pero si los quitas o sigues la ejecución paso a paso verás que es muy simple)

'*******************************
Public Function IsActiveXAlive _
( _
ByVal strActiveXFileName As String, _
ByVal strClass As String, _
Optional strServerName As String, _
Optional Retry As Integer = 0 _
) As Boolean

Dim objTest As Object

On Error Resume Next 'Controlaremos el error en las líneas posteriores
'Hacemos el intento de instanciar
Set objTest = CreateObject(strClass, strServerName)
'Comprobamos el error, si se produjo
Select Case Err.Number
Case 0 'No hubo error, se podrá usar la librería
IsActiveXAlive = True

Case 429 '"El componente ActiveX no puede crear el objeto"
'Vamos a intentar registrarla:
Select Case Retry
Case 0
'Era el primer intento de instanciarla, por lo que vamos a realizar
' el primer intento de registrarla.
'Intentamos registrarla sin especificar una ruta,
' por si el usuario ya la tiene copiada
' en la carpeta del sistema (mala costumbre por cierto)
Shell "RegSvr32 /s """ & strActiveXFileName & "", vbHide
'Devolvemos el segundo intento de instanciar la librería
IsActiveXAlive = IsActiveXAlive(strActiveXFileName, strClass, strServerName, Retry + 1)

Case 1
'Si existe el fichero en la misma carpeta del libro, volvemos a intentarlo
If Dir$(ThisWorkbook.Path & "\" & strActiveXFileName) <> "" Then
Shell "RegSvr32 /s """ & ThisWorkbook.Path & "\" & strActiveXFileName & "", vbHide
End If
'Devolvemos el tercer intento de instanciar la librería
IsActiveXAlive = IsActiveXAlive(strActiveXFileName, strClass, strServerName, Retry + 1)

Case 2
'Se intenta localizar en el subdirectorio de recursos del libroQ
If Dir$(ThisWorkbook.Path & "\ActiveXs\" & strActiveXFileName) <> "" Then
Shell "RegSvr32 /s """ & ThisWorkbook.Path & "\ActiveXs\" & strActiveXFileName & "", vbHide
'Devolvemos el cuarto intento de instanciar la librería
End If
IsActiveXAlive = IsActiveXAlive(strActiveXFileName, strClass, strServerName, Retry + 1)

Case Else
'No contemplamos más intentos, no se pudo registrar ni instanciar.

End Select

Case Else
WriteErrLog Err.Number, Err.Description, "IsActiveXAlive", , Erl()

MsgBox "Se ha producido el error '" & Err.Number & "'." & _
vbCrLf & Err.Description, vbCritical, "IsActiveXAlive"

End Select

Set objTest = Nothing
End Function
'*******************************


De hecho, otra de mis dudas actuales tiene algo que ver. Se trata de
instalar el archivo en un determinado directorio, aunque ni siquiera he
empezado a mirarlo y quizas no sea complicado (aparte de ser otro tema
diferente)



Puede que sea mejor abrir una conversación nueva para no mezclar demasiado los temas (revisaré las conversaciones de estos días pasados, por si ya lo has hecho), aunque ya sé que fui yo quien empezó a mezclar el tema...

Saludos
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/micr...c.es.excel
( i ) Temperancia en el foro:
http://support.microsoft.com/defaul...newsreglas
Respuesta Responder a este mensaje
#10 Ivan
14/01/2007 - 23:39 | Informe spam
hola Vinchenzo, enhorabuena por tu nueva adquisicion. Estoy seguro que
le sacaras un gran partido.

y muchas gracias de nuevo por tu ayuda.

Siempre es muy frecuente que no se sepa con total certeza quién acabará usando la aplicación, ni el nivel >de conocimientos informáticos de esas personas, ni de sus intenciones, lógicamente.
..., donde me preocupan más los usuarios que desconocen la informática o tienen un nivel de >conocimientos básico





estoy totalmente de acuerdo, de hecho, desde mi ignorancia, en mas de
una y de dos ocasiones (me) he provocado un buen desaguisado en
diversas situaciones/programas

tomo buena nota de todos tus consejos, y, a ver hasta donde soy capaz
de aplicarlos.

en cuanto a la libreria de Ruben, aunque me la he bajado, todavia no me
he puesto con ella. Voy a estudiar tu funcion, (y ya de paso a buscar
mas informacion sobre la encriptacion en si misma) para saber un poco
como moverme, y poder aplicarla con algo de criterio.

un saludo y hasta pronto
Ivan

PD: en cuanto al archivo, en un ataque de inmodestia (o de vanidad,
o...) crei que seria cuestion de nada rehacerlo en condiciones y con
nuevas ocurrencias, ... y ahora me hayo intentando ensamblar
tropecientos fragmentos (es una de esas situaciones en las que
comprendes aquello de que el que mucho abarca poco aprieta). De todas
formas confio en poder volverlo a poner en un estado mas o menos
operativo en poco tiempo.(tengo el archivo original, pero despues de mi
ultimos devaneos, no creo que merezca la pena)

En cuanto lo tenga cuenta con el.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida