Uso de variables de entorno Windows Xp en VBA

03/08/2006 - 22:01 por Cristian | Informe spam
Hola a todos:

Alguien sabe como usar las variables de entorno de windows xp en vba (y
cuales se pueden usar). la idea es que pueda determinar la ruta de la
carpeta mis documentos para el usuario actual, la ruta de instalacion de
windows y otras... desde ya gracias




Saludos, CRISTIAN

Preguntas similare

Leer las respuestas

#1 ST
04/08/2006 - 20:15 | Informe spam
Muy buenos sus aportes !!!!!

si yo deseara saber la ruta de algunas applicaciones por ejemplo del
winzip y del acrobat que no forman parte de la paqueteria,como seria el
asunto???

:-) saludos

ST
Respuesta Responder a este mensaje
#2 Vinchenzo vinç
07/08/2006 - 10:05 | Informe spam
"ST" <@> escribió en el mensaje news:
si yo deseara saber la ruta de algunas applicaciones por ejemplo del
winzip y del acrobat que no forman parte de la paqueteria,como seria el
asunto???



Hola,
la única forma que conozco que alcance al menos el 99.99 % de resultado satisfactorio, es haciendo una búsqueda en los
directorios y subdirectorios de las unidades del equipo, en busca del fichero en cuestión. Lógicamente tiene el inconveniente de
que la búsqueda puede tardar demasiado, y además cabe la posibilidad de que existan más de una copia del fichero en distintas
carpetas y/o unidades.

Hay una opción usando la función de la API de Windows 'FindExecutable':
http://msdn.microsoft.com/library/d...utable.asp

El problema de esta función es que te devuelve el programa que tiene asociado una determinada extensión. Aunque tengas
instalado WinZip, nada te garantiza que vaya a ser esta aplicación la que esté asociada a la extensión '.zip'. Lo mismo pasaría
con los '.pdf', y con muchas otras extensiones que damos por relacionadas con un programa específico, pudiendo no ser así.

Un pequeño ejemplo con esta función, que te devolverá la ruta del ejecutable asociado con la extensión que le pases:
'***********
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" ( _
ByVal lpFile As String, _
ByVal lpDirectory As String, _
ByVal lpResult As String) As Long

Private Const SE_ERR_FNF As Long = 2
Private Const SE_ERR_NOASSOC As Long = 31
Private Const SE_ERR_OOM As Long = 8

Public Function ExeAsociado(ByVal strExtensión As String) As String
Dim strRutaExe As String
Dim strFichero As String
Dim strRtnErr As String
Dim blnCreado As Boolean

' Creas una ruta de un fichero temporal
strFichero = Environ$("Temp") & "\FicheroTemporal." & strExtensión
' Si el fichero no existiese (lo más probable), lo creamos
If Dir$(strFichero) = vbNullString Then
Dim bytFF As Byte

bytFF = FreeFile()
Open strFichero For Output As #bytFF
Close #bytFF
blnCreado = True
End If

strRutaExe = String$(255, Chr$(0))
' Intentamos obtener la ruta del ejecutable asociado
Select Case FindExecutable(strFichero, vbNullString, strRutaExe)
Case Is > 32: strRutaExe = Left$(strRutaExe, InStr(1, strRutaExe, Chr$(0)) - 1)
Case SE_ERR_FNF: strRtnErr = "No se encontró el fichero"
Case SE_ERR_NOASSOC: strRtnErr = "No existe asociación para el tipo de fichero especificado"
Case SE_ERR_OOM: strRtnErr = "Sin memoria o recursos"
Case Else: strRtnErr = "Error desconocido"
End Select
' Si el fichero temporal lo hemos creado n osotros, lo eliminamos.
If blnCreado = True Then Kill strFichero
ExeAsociado = IIf(strRtnErr = vbNullString, strRutaExe, strRtnErr)
End Function
'***********

Ahora llamas a la función, pasándole la extensión que "supuestamente" estaría asociada al programa del que deseas averiguar su
ruta:
MsgBox ExeAsociado("zip")
MsgBox ExeAsociado("pdf")
...

Probablemente otra opción sería examinar el registro de Windows, buscando en
"HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths" o "Uninstall" intentando obtenier la lista de aplicaciones
"desinstalables", pero pueden no estar todos. En el siguiente enlace tienes un ejemplo:

· RegEnumKeyEx: Retrieve Windows Uninstallable Application List
http://vbnet.mvps.org/index.html?co...nstall.htm

Aplicaciones como 'Adobe Reader' tienen un GUID de clave, por lo que deberías ir comparando los valores (por ejemplo de
"DisplayName Like Adobe Reader*") hasta encontrarlo, y entonces obtener el valor de 'InstallLocation')


Bueno, si buscando encuentras algo 100% eficaz, sin posibilidad de error, se agradecería que nos lo comentaras...

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
#3 Cristian
07/08/2006 - 17:03 | Informe spam
Muchas gracias a todos, la informacion que han brindado es justo lo que
buscaba.




"Cristian" escribió en el mensaje
news:
| Hola a todos:
|
| Alguien sabe como usar las variables de entorno de windows xp en vba (y
| cuales se pueden usar). la idea es que pueda determinar la ruta de la
| carpeta mis documentos para el usuario actual, la ruta de instalacion de
| windows y otras... desde ya gracias
|
|
|
|
| --
| Saludos, CRISTIAN
|
|
Respuesta Responder a este mensaje
#4 Héctor Miguel
08/08/2006 - 08:03 | Informe spam
hola, chicos !

ST escribio en el mensaje ...
si yo deseara saber la ruta de algunas applicaciones por ejemplo del winzip y del acrobat
que no forman parte de la paqueteria, como seria el asunto???



puedo preguntarte por/para que es que necesitarias 'conocer' la ruta de aplicaciones [generalmente] 'universales' -???- [p.e.]
si 'asumimos' que las extensiones .ZIP y .PDF [y cualquier aplicacion que las 'ejecute'] estan 'debidamente' registradas en windows...
prueba con una instruccion 'Shell' para 'lanzar' -directamente- el archivo que necesites [wndows se encargaria asociarlo a su aplicacion]

tampoco existe una garantia total de que no habra 'fallas' :-(( pero valdria la pena probar... ;)
del siguiente ejemplo, puedes sustituir la segunda linea por alguna 'variable' -previamente establecida- o por la ruta apropiada...

Shell Environ("comspec") & " /c """ & _
"c:uta y\sub carpetas\ donde esta\tu archivo.pdf" & _
"""", vbHide

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la excel...ente aportacion de...
Vinchenzo vinç escribio en el mensaje ...
la unica forma que conozco que alcance al menos el 99.99 % de resultado satisfactorio
es haciendo una busqueda en los directorios y subdirectorios de las unidades del equipo
en busca del fichero en cuestion. Logicamente tiene el inconveniente de que la búsqueda puede tardar demasiado
y ademas cabe la posibilidad de que existan más de una copia del fichero en distintas carpetas y/o unidades.
Hay una opcion usando la funcion de la API de Windows 'FindExecutable':
http://msdn.microsoft.com/library/d...utable.asp
El problema de esta funcion es que te devuelve el programa que tiene asociado una determinada extension.
Aunque tengas instalado WinZip, nada te garantiza que vaya a ser esta aplicacion la que este asociada a la extension '.zip'.
Lo mismo pasaria con los '.pdf', y con muchas otras extensiones que damos por relacionadas con un programa específico, pudiendo no ser asi.
Un peque#o ejemplo con esta funcion, que te devolvera la ruta del ejecutable asociado con la extension que le pases:
'***********
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" ( _
ByVal lpFile As String, _
ByVal lpDirectory As String, _
ByVal lpResult As String) As Long

Private Const SE_ERR_FNF As Long = 2
Private Const SE_ERR_NOASSOC As Long = 31
Private Const SE_ERR_OOM As Long = 8

Public Function ExeAsociado(ByVal strExtensión As String) As String
Dim strRutaExe As String
Dim strFichero As String
Dim strRtnErr As String
Dim blnCreado As Boolean

' Creas una ruta de un fichero temporal
strFichero = Environ$("Temp") & "\FicheroTemporal." & strExtensión
' Si el fichero no existiese (lo más probable), lo creamos
If Dir$(strFichero) = vbNullString Then
Dim bytFF As Byte

bytFF = FreeFile()
Open strFichero For Output As #bytFF
Close #bytFF
blnCreado = True
End If

strRutaExe = String$(255, Chr$(0))
' Intentamos obtener la ruta del ejecutable asociado
Select Case FindExecutable(strFichero, vbNullString, strRutaExe)
Case Is > 32: strRutaExe = Left$(strRutaExe, InStr(1, strRutaExe, Chr$(0)) - 1)
Case SE_ERR_FNF: strRtnErr = "No se encontró el fichero"
Case SE_ERR_NOASSOC: strRtnErr = "No existe asociación para el tipo de fichero especificado"
Case SE_ERR_OOM: strRtnErr = "Sin memoria o recursos"
Case Else: strRtnErr = "Error desconocido"
End Select
' Si el fichero temporal lo hemos creado n osotros, lo eliminamos.
If blnCreado = True Then Kill strFichero
ExeAsociado = IIf(strRtnErr = vbNullString, strRutaExe, strRtnErr)
End Function
'***********
Ahora llamas a la funcion, pasandole la extension que "supuestamente" estaria asociada al programa del que deseas averiguar su ruta:
MsgBox ExeAsociado("zip")
MsgBox ExeAsociado("pdf")
Probablemente otra opcion seria examinar el registro de Windows, buscando en
"HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths" o "Uninstall"
intentando obtenier la lista de aplicaciones "desinstalables", pero pueden no estar todos. En el siguiente enlace tienes un ejemplo:
· RegEnumKeyEx: Retrieve Windows Uninstallable Application List
http://vbnet.mvps.org/index.html?co...nstall.htm
Aplicaciones como 'Adobe Reader' tienen un GUID de clave, por lo que deberías ir comparando los valores
(por ejemplo de "DisplayName Like Adobe Reader*") hasta encontrarlo, y entonces obtener el valor de 'InstallLocation')
Bueno, si buscando encuentras algo 100% eficaz, sin posibilidad de error, se agradeceria que nos lo comentaras...
Respuesta Responder a este mensaje
#5 ST
08/08/2006 - 20:53 | Informe spam
Héctor Miguel ha escrito:

pues resulta que cuando desea abri un archivo pdf o zip desde excel uso
lo sig:

Sub abrirPDF3_A()
Dim EjecutablePDF As String
EjecutablePDF = "C:\Archivos de programa\Adobe\Acrobat
7.0\Reader\AcroRd32.exe"
Shell EjecutablePDF & " " & "E:\facts23_es.pdf""", 1
End Sub

y como podras apreciar tengo que establecer toda la ruta completa al
".exe" apropiado ,ya que de otra manera no se ejecuta y por lo tanto no
abre el archivo.
entonces se me ocurrio pensar que tal vez exista una manera de llamar
al ejecutable sin escibir la ruta como la tengo en el ejemplo de arriba

probe tu codigo y funciona de maravillas,ahora el asunto es entender lo
que hace cada palabra o clave por ejemplo:
1.-Environ
2.-compsec
3.-" /c"
4.-vbHide.-esto por logica entiendo que oculta algo pero que??

salu2
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida