Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Visual Basic en Vista

Estas en el tema de Visual Basic en Vista en el foro de Visual Basic clásico en Foros del Web. Tengo una macro que he usado varios años en XP... Me han cambiado de PC y ésta trae Vista; al intentar utilizar la macro en ...
  #1 (permalink)  
Antiguo 16/05/2009, 13:38
Colaborador
 
Fecha de Ingreso: agosto-2004
Mensajes: 1.611
Antigüedad: 19 años, 7 meses
Puntos: 47
Visual Basic en Vista

Tengo una macro que he usado varios años en XP...
Me han cambiado de PC y ésta trae Vista; al intentar utilizar la macro en Vista me envia el mensaje de error "Windows no encuentra el archivo en la ruta especificada".

La expresión que uso en XP (y se ejecuta correctamente) es:

ElseIf Cliente = "XXXX" Then
Workbooks.Open Filename:="C:\AAAA\BBBB\CCCC\DDDD\Rep.xls"

En Vista sólo he corregido la ruta de búsqueda, así:

ElseIf Cliente = "XXXX" Then
Workbooks.Open Filename:="C:\Usuarios\Uzziber\AAAAA\BBBB\CCCC\DDD D\Rep.xls"

Y me lanza el mensaje de error...
De la instrucción he probado eliminando las carpetas Usuarios y Uzziber, pensando que son carpetas que el sistema no toma en cuenta; pero...
La ruta es exactamente la misma, ya que los archivos los he transferido a la nueva PC sin cambios...exceptuando el tema de las carpetas Usuarios y Uzziber ya que así la recibí.
¿Qué está mal ó que cambios hay en Vista respecto a Visual?
De antemano mi agradecimiento por la ayuda...
Saludos...
  #2 (permalink)  
Antiguo 17/05/2009, 04:07
 
Fecha de Ingreso: mayo-2009
Mensajes: 31
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Visual Basic en Vista

Hola, yo tuve un problema parecido. Supuse que la ruta "\Usuarios\" en Vista es virtual, así que usé la siguiente función, que te devuelve la ruta real del usuario activo y además haces independiente a tu programa de la versión del sistema operativo.

sería: GetUserRoot() & "\AAAA\... etc

Espero que te sirva.

Código:
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetUserProfileDirectory Lib "userenv.dll" Alias "GetUserProfileDirectoryA" (ByVal hToken As Long, ByVal lpProfileDir As String, lpcchSize As Long) As Boolean

Public Function GetUserRoot() As String
    Dim sBuffer As String
    Dim hToken As Long
    sBuffer = String(255, 0)
    OpenProcessToken GetCurrentProcess, TOKEN_QUERY, hToken
    GetUserProfileDirectory hToken, sBuffer, 255
    GetUserRoot = StrZToStr(sBuffer)
End Function

Function StrZToStr(ByVal StrZ As String) As String
    On Error GoTo StringError
    If InStr(StrZ, vbNullChar) > 0 Then
        StrZToStr = left(StrZ, InStr(StrZ, vbNullChar) - 1)
    Else
        StrZToStr = StrZ
    End If
    Exit Function
StringError:
    StrZToStr = vbNullString
End Function
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:00.