Adjuntar a rutina para crear acceso directo del archivo

hola que tal mi pregunta es la siguiente tengo la siguiente rutina la cual utiliza el mismo libro lo guarda con otro nombre y borra todas las celdas que están desprotegidas lo que me gustaría es que dentro de la misma rutina me cree un acceso directo en el escritorio del archivo que se guardo como.ya e intentado muchas formas pero nada mas no puedo solo me creaba el archivo .lnk pero sin la ruta ni la imagen de tipo de archivo
el código es el siguiente

<pre class="prettyprint" style="width: 551px; height: 448px;">Private Sub CommandButton1_Click()
Dim RESP As Integer
RESP = MsgBox("ESTA USTED SEGURO DE CONTINUAR LOS CAMBIOS SON IRREBOCABLES", vbOKCancel, "CREAR LIBRO")
If RESP = vbCancel Then
MsgBox "SE CANCELO PROCESO ", vbCritical, "CANCELACIÓN"
Exit Sub
Unload Me
End If
If vbOK Then
ruta = "F:\RAUL\REPORTES DE OPERACIÓN\"
archivo = InputBox("Nombre del archivo", "Archivo")
ActiveWorkbook.SaveAs ruta & archivo & ".xlsM"
Sheets(1).Activate
'
For P = 1 To 31
Sheets(P).Select
Dim c As Range
On Error Resume Next
For Each c In Range("A1:T198")
If c.Locked = False Then
c.ClearContents
c = 0
End If
Next
Range("B8:J9").Select
Selection.ClearContents
Range("B12:J14").Select
Selection.ClearContents
Range("H19:J21").Select
Selection.ClearContents
Range("A67:J97").Select
Selection.ClearContents
Next P
Sheets(1).Activate
MsgBox (" BORRADO DE CELDAS TERMINADO "), vbInformation
MsgBox "REVISE SU RUTA PARA REVISAR EL ARCHIVO"
Unload Me
End If
End Sub</pre>

1 Respuesta

Respuesta
1

Te anexo la macro para crear un acceso directo.

Actualiza en la macro ruta y archivo

Sub accesodirecto()
Dim numError As Long
Dim ruta, archivo, todo As String
ruta = "C:\Documents and Settings\Mis documentos\Soporte expertos\"
archivo = "prueba.xls"
todo = ruta & archivo
    numError = CreateShortCut(todo, "Desktop", , "Acceso a " & archivo)
    If numError = -1 Then
        MsgBox "Se ha creado un acceso directo en el escritorio"
    Else
        MsgBox "Error: " & numError & vbCrLf & vbCrLf _
        & "No se pudo completar la operación"
    End If
End Sub
'---------------------------------------------------------
'
' CreateShortCut
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
'     [email protected]
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
Function CreateShortCut( _
         FileName As String, _
         Destination As Variant, _
         Optional Args As String, _
         Optional LinkName As String, _
         Optional IconPath As String) As Long
Dim WScript As Object    'New WshShell
Dim WShortCut As Object    'WshShortcut
Dim ShortCutPath As String
    On Error GoTo CreateShortCut_Error
    ' si el archivo no existe lanzamos un error
    ' de ruta de archivo incorrecta
    If Len(Dir(FileName)) = 0 Then Err.Raise 52
    ' creamos un nuevo objeto Shell
    Set WScript = CreateObject("WScript.Shell")
    ' obtenemos la ruta del destino del acceso directo
    ShortCutPath = WScript.SpecialFolders(Destination)
    ' si no es una carpeta especial
    If Len(ShortCutPath) = 0 Then
        ' o no es una carpeta válida
        ShortCutPath = Destination
        If Len(Dir(ShortCutPath, vbDirectory)) = 0 Then
            ' lanzamos el error 52, ruta de archivo incorrecta
            Err.Raise 52
        End If
    End If
    ' creamos el acceso directo al archivo indicado
    Set WShortCut = WScript.CreateShortCut _
                    (ShortCutPath & "\" & Dir(FileName) & ".lnk")
    ' indicamos la ruta del archivo
    WShortCut.TargetPath = FileName
    ' si se ha indicado el icono para el acceso directo
    If Len(Dir(IconPath)) > 0 Then
        WShortCut.IconLocation = IconPath & ", 0"
    Else
    ' sino, indicamos el icono por defecto
        WShortCut.IconLocation = FileName & ", 0"
    End If
    'indicamos el directorio de trabajo en la carpeta
    WShortCut.WorkingDirectory = Left(FileName, _
                                      Len(FileName) - Len(Dir(FileName)))
    ' Indicamos los argumentos
    WShortCut.Arguments = Args
    'y grabamos el trabajo
    WShortCut. Save
    'una vez grabado el archivo se le cambia el nombre
 'si se ha pasado algún valor en el argumento LinkName
    If Not IsMissing(LinkName) Then
        LinkName = ShortCutPath & "\" & LinkName & ".lnk"
        Name WShortCut.FullName As LinkName
    End If
    CreateShortCut = -1
exit_CreateShortCut:
    Set WShortCut = Nothing
    Set WScript = Nothing
    On Error GoTo 0
    Exit Function
CreateShortCut_Error:
    ' si ha habido algún error, grabamos el número
    CreateShortCut = Err.Number
    ' y salimos
    Resume exit_CreateShortCut
End Function
'---------------------------------------------------------

saludos.dam

ok bien lo que no entiendo es si lo debo poner dentro de la rutina o llamar la macro si es asi como le ago para que me ponga el mismo nombre que le otorgue al archivo.

bueno si va dentro de la rutina solo edito lar rutas verdad

gracias

ya para cerrar la pregunta y puntear

gracias de nuevo

Justo antes grabar el acceso directo, pon el siguiente código

'****

Dim numError As Long
Dim ruta, archivo, todo As String
ruta = "C:\Documents and Settings\Mis documentos\Soporte expertos\"
archivo = "prueba.xls"
todo = ruta & archivo
numError = CreateShortCut(todo, "Desktop", , "Acceso a " & archivo)
If numError = -1 Then
MsgBox "Se ha creado un acceso directo en el escritorio"
Else
MsgBox "Error: " & numError & vbCrLf & vbCrLf _
& "No se pudo completar la operación"
End If

'****

Y hasta la última línea que tengas de tu macro, después del último end sub que tengas. Pegas

'---------------------------------------------------------
'
' CreateShortCut
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
' [email protected]
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
Function CreateShortCut( _
FileName As String, _
Destination As Variant, _
Optional Args As String, _
Optional LinkName As String, _
Optional IconPath As String) As Long
Dim WScript As Object 'New WshShell
Dim WShortCut As Object 'WshShortcut
Dim ShortCutPath As String
On Error GoTo CreateShortCut_Error
' si el archivo no existe lanzamos un error
' de ruta de archivo incorrecta
If Len(Dir(FileName)) = 0 Then Err.Raise 52
' creamos un nuevo objeto Shell
Set WScript = CreateObject("WScript.Shell")
' obtenemos la ruta del destino del acceso directo
ShortCutPath = WScript.SpecialFolders(Destination)
' si no es una carpeta especial
If Len(ShortCutPath) = 0 Then
' o no es una carpeta válida
ShortCutPath = Destination
If Len(Dir(ShortCutPath, vbDirectory)) = 0 Then
' lanzamos el error 52, ruta de archivo incorrecta
Err.Raise 52
End If
End If
' creamos el acceso directo al archivo indicado
Set WShortCut = WScript.CreateShortCut _
(ShortCutPath & "\" & Dir(FileName) & ".lnk")
' indicamos la ruta del archivo
WShortCut.TargetPath = FileName
' si se ha indicado el icono para el acceso directo
If Len(Dir(IconPath)) > 0 Then
WShortCut.IconLocation = IconPath & ", 0"
Else
' sino, indicamos el icono por defecto
WShortCut.IconLocation = FileName & ", 0"
End If
'indicamos el directorio de trabajo en la carpeta
WShortCut.WorkingDirectory = Left(FileName, _
Len(FileName) - Len(Dir(FileName)))
' indicamos los argumentos
WShortCut.Arguments = Args
'y grabamos el trabajo
WShortCut.Save
'una vez grabado el archivo se le cambia el nombre
'si se ha pasado algún valor en el argumento LinkName
If Not IsMissing(LinkName) Then
LinkName = ShortCutPath & "\" & LinkName & ".lnk"
Name WShortCut.FullName As LinkName
End If
CreateShortCut = -1
exit_CreateShortCut:
Set WShortCut = Nothing
Set WScript = Nothing
On Error GoTo 0
Exit Function
CreateShortCut_Error:
' si ha habido algún error, grabamos el número
CreateShortCut = Err.Number
' y salimos
Resume exit_CreateShortCut
End Function
'---------------------------------------------------------

Gracias. Dam

Me gusta ayudar y seguir aprendiendo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas