Страницы: 1
RSS
Макросом поменять значок ярлыка
 
Всем доброго дня!
Нашел в инете макрос, немного переделал под себя, но не все получилось.
Суть вопроса:
При открытии книги создается ярлык в папке с этой книгой, это работает:
Код
    Dim sPath As String
    Dim sFileName As String  
    Dim WshURLShortcut As Object  
    sPath = ThisWorkbook.Path & "\"
    sFileName = ThisWorkbook.Name    
    Set WshURLShortcut = CreateObject("WScript.Shell").CreateShortcut(sPath & "Мой ярлык.lnk")
    WshURLShortcut.Description = "Работаем с удовольствием!"
    WshURLShortcut.TargetPath = sPath & sFileName
    WshURLShortcut.Save
Но хотелось бы чтобы менялся и значок ярлыка (иконка в этой же папке в подпапке "Ico").
В  идеале хотелось бы чтобы ярлык сразу помещался на рабочий стол (на  любом компьютере и вне зависимости от расположения папки с файлом - хоть  на жестком диске, хоть на флэшке).
Хочу это сделать для удобства пользователей - с копиями этого файла будут работать на разных компьютерах.
Это  вообще реально осуществить кодом VBA? Если да, то прошу натолкнуть на  мысль, чем можно воспользоваться или кинуть ссылку, где можно получить  ответ на этот вопрос.
Заранее большое спасибо!    
 
http://scriptcoding.ru/2013/06/27/wscript-shell-createshortcut/
так как такое больше востребовано админами, а они больше по понятным причинам к VBS, JS, PS1 тяготеют, то лучше искать VBS скрипт с таким функционалом.
Изменено: БМВ - 27.09.2018 12:41:47
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо, буду разбираться. В идеале, конечно, хотелось бы обойтись просто VBA - чем меньше в проводах соединений, тем контакт надежней :)
 
_Igor_61, Так VBS - Это почти VBA. В данном случае и делать почти ничего не надо, разве что основной код в SUB обернуть "WScript." убрать.
Бывает что WScript.echo заменить надо на что-либо что подходит по смыслу  (это не совсем MSGBOX). А так совместимость очень большая. Я порой VBS отлаживаю в отладчике Excel.
Изменено: БМВ - 27.09.2018 10:47:05
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Я порой VBS отлаживаю в отладчике Excel.
Аналогично. При этом гнусно матюкаюсь нехорошими словами когда в VBA есть удобная функция, а в VBS такой нет и приходится её сочинять.
Не стреляйте в тапера - он играет как может.
 
Цитата
Ts.Soft написал:
гнусно матюкаюсь нехорошими словами когда в VBA есть удобная функция, а в VBS такой нет
С этим сложно не согласиться  :D
"Все гениальное просто, а все простое гениально!!!"
 
Понятно, спасибо! Буду разбираться, о результатах отпишусь
 
Off
Цитата
Ts.Soft написал:
когда в VBA есть удобная функция
ээээ Welcome to PowerShell :-). Но если серьезно, то например каких не хватает?
По вопросам из тем форума, личку не читаю.
 
Получилось!  :)  
БМВ, огромное СПАСИБО за ссылку, очень хорошо все описано и показано!
Вот что сделал:
Код
Sub Ярлык()
    Dim sPath As String         'путь к файлу
    Dim sFold As String         'путь к вложенной папке
    Dim sPath1                  'путь к рабочему столу
    Dim sFileName As String     'Имя файла
    Dim LinkDesktop As Object
    Dim LinkFolder As Object
    Dim WshShell As Object
    Dim WshShell1 As Object
    sPath = ThisWorkbook.Path & "\"
    sFold = ThisWorkbook.Path & "\Ico"
    sFileName = ThisWorkbook.Name
    
    Set WshShell = CreateObject("WScript.Shell")
    sPath1 = WshShell.SpecialFolders("Desktop")
    
    Set LinkDesktop = WshShell.CreateShortcut(sPath1 & "\Мой ярлык.lnk") 'местоположение и имя ярлыка
    Set LinkFolder = WshShell.CreateShortcut(sPath1 & "\Папка.lnk")      'местоположение и имя ярлыка
    
    With LinkDesktop
        .Description = "Работаем с удовольствием!"          'Комментарий ярлыка на раб. столе
        .TargetPath = sPath & sFileName                     'ссылка на исходный файл
        .IconLocation = sPath & "Ico\Icon1.ico"             'ссылка на иконку
        .WindowStyle = 3                                    'Окно во весь экран
        .Save
    End With
    With LinkFolder
        .Description = "Вложенная папка"
        .TargetPath = sFold
        .IconLocation = sPath & "Ico\Icon1.ico"
        .Save
    End With
End Sub

Действительно, "все просто, когда знаешь"  :)
Изменено: _Igor_61 - 27.09.2018 23:15:47
 
_Igor_61,  Всегда готов помочь. Вот и сейчас. Не должно работать.
Код
     sPath1 = WshShell.SpecialFolders("Desktop")
    sFileName = ThisWorkbook.Name
    Set WshShell = CreateObject("WScript.Shell")

Порядок перепутан WshShell определить до применения нужно
Код
    Set WshShell = CreateObject("WScript.Shell")
     sPath1 = WshShell.SpecialFolders("Desktop")
    sFileName = ThisWorkbook.Name
Изменено: БМВ - 27.09.2018 20:29:21
По вопросам из тем форума, личку не читаю.
 
Точно, как всегда руки быстрее головы - не из того файла скопировал :)
Поменял, и добавил еще ярлык для вложенной папки
Изменено: _Igor_61 - 27.09.2018 23:10:31
Страницы: 1
Наверх