Problema con instrucción Conciliar en macro

Hola tengo un problema
Lo que pasa es que necesito realizar una macro que ejecute la función de Consolidar cada vez que se ejecute
Los datos a consolidar se encuentran en las columnas aa y ab con sus respectivos títulos y demás
La macro funciona bien pero el asunto es que en el siguiente código
Sub Macro7()
'
' Macro7 Macro
'
' Acceso directo: Ctrl+Mayús+E
'
    Range("H13").Select
    Selection.Consolidate Sources:=Array( _
        "'C:\Documents and Settings\Administrator\My Documents\otros formatos\FLEX\[base de datos apro.xls]Master Bill'!R1C27:R20C28" _
        , _
        "'C:\Documents and Settings\Administrator\My Documents\otros formatos\FLEX\[base de datos apro.xls]Master Bill'!R1C27:R2616C28" _
        , _
        "'C:\Documents and Settings\Administrator\My Documents\otros formatos\FLEX\[base de datos apro.xls]Master Bill'!R4C20:R2873C21" _
        ), Function:=xlCount, TopRow:=True, LeftColumn:=True, CreateLinks:= _
        False
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 3
    Range("H13").Select
End Sub
Como pueden ver pone la ruta del archivo y es lo que quiero eliminar ya que esa macro se ejecuta por diversas personas en distintas maquinas por lo que la ruta no es la misma
Los datos y el lugar donde se pone el resultado es la misma hoja en el mismo libro, es decir la hoja llamada "master bill"
¿Saben si hay alguna forma de hacer para que ejecute la acción sin tomar en cuenta la raíz?
Gracias

1 respuesta

Respuesta
1
Entiendo que el problema radica en el usuario de la raíz de tu archivo, ¿cómo cambia el usuario que lo ejecuta no puedes ponerlo fijo?
Te propongo que recuperes el usuario que esta ejecutando la macro y evitar que la macro se limite a un solo usuario, para ello debes hacer unos cambios en tu código que te muestro a continuación:

'Esta función se utiliza para recuperar el usuario del sistema
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Sub Macro7()
'
' Macro7 Macro
'
' Acceso directo: Ctrl+Mayús+E
'
'Este código sirve para recuperar el usuario que está utilizando la PC, mismo que usaras para no limitar el uso de tu macro a un solo usuario
    Dim lpBuff As String * 25
    Dim ret As Long, UserName As String
    ret = GetUserName(lpBuff, 25)
    UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
'En tu código debes substituir el usuario por " & UserName & " esto con el fin de identificar el usuario con el que ingresaron a la PC
    Range("H13").Select
    Selection.Consolidate Sources:=Array( _
        "'C:\Documents and Settings\" & UserName & "\My Documents\otros formatos\FLEX\[base de datos apro.xls]Master Bill'!R1C27:R20C28" _
        , _
        "'C:\Documents and Settings\" & UserName & "\My Documents\otros formatos\FLEX\[base de datos apro.xls]Master Bill'!R1C27:R2616C28" _
        , _
        "'C:\Documents and Settings\" & UserName & "\My Documents\otros formatos\FLEX\[base de datos apro.xls]Master Bill'!R4C20:R2873C21" _
        ), Function:=xlCount, TopRow:=True, LeftColumn:=True, CreateLinks:= _
        False
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 3
    Range("H13").Select
End Sub


Si es algo diferente lo que necesitas
Hola gracias por tu respuesta pero a lo que me refiero es a poder poner la rutina deconsolidar pero sin necesidad de indicar el directorio raíz donde se encuentra el archivo, sino solamente indicándole el libro por ejemplo
cambiar de esto:
C:\Documents and Settings\Administrator\My Documents\otros formatos\FLEX\[base de datos apro.xls]Master Bill'!R1C27:R2616C28
a solamente esto
Master Bill'!R1C27:R2616C28
Ya que cada quien ejecuta y guardael archivo en diferentesrutas
Gracias de nuevo
OK, lo que puedes hacer es recuperar la ruta y nombre del archivo, guardarlo en una variable y posteriormente en lugar de especificar la ruta completa utilizas los valores obtenidos
'Obtener la ruta del archivo
ruta = ThisWorkbook.Path
'Obtener el nombre del archivo
nombre = ThisWorkbook.Name
'utilizas las variables sustituyendo la ruta completa
Selection.Consolidate Sources:=Array( _
        "'" & ruta & "\" & "[" & nombre & "]" & "Master Bill'!R1C27:R20C28", _
        "'" & ruta & "\" & "[" & nombre & "]" & "Master Bill'!R1C27:R2616C28", _
        "'" & ruta & "\" & "[" & nombre & "]" & "Master Bill'!R4C20:R2873C21"), _
        Function:= xlCount, TopRow:= True, LeftColumn:= True, CreateLinks:=False
Pruébalo si tienes duda me comentas
Saludos

Rene Nochebuena

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas