powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
10 сообщений из 10, страница 1 из 1
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38086267
Wyfinger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал для себя небольшой скрипт - очень выручает в повседневной работе.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
'
' PasteLink - простой макрос на VBA для Excel для вставки в ячейку гипперссылки
' на файл, лежащий в буфере обмена.
' 
' Для установки необходимо добавить новый модуль в шаблоне по умолчанию (PERSONAL.XLSB),
' скопировать в него данный код и повесить на удобное сочетание клавиш макрос PasleOneLinkFromClipdoard()
' (я использую сочетание Ctrl+E).
'
' При вызове макроса (нажатии выбранного сочетания клавиш) в текущую ячейку будет вставлена
' гиперссылка (если в ячейке есть текст - добавлена ссылка, если нет - будет вставлен
' путь к файлу в буфере и гиперссылка.
'
' Wyfinger (wyfinger@yandex.ru)
' 

Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal uFormat As Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal Hwnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal uFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal drop_handle As Long, ByVal UINT As Long, ByVal lpStr As String, ByVal ch As Long) As Long

Private Const CF_HDROP As Long = 15

Private Function GetFiles(ByRef fileCount As Long) As String()
'
' Получить имена файлов, скопированнных в буфер обмена
'
    Dim hDrop As Long, i As Long
    Dim aFiles() As String, sFileName As String * 1024

    fileCount = 0

    If Not CBool(IsClipboardFormatAvailable(CF_HDROP)) Then Exit Function
    If Not CBool(OpenClipboard(0&)) Then Exit Function

    hDrop = GetClipboardData(CF_HDROP)
    If Not CBool(hDrop) Then GoTo done

    fileCount = DragQueryFile(hDrop, -1, vbNullString, 0)

    ReDim aFiles(fileCount - 1)
    For i = 0 To fileCount - 1
        DragQueryFile hDrop, i, sFileName, Len(sFileName)
        aFiles(i) = Left$(sFileName, InStr(sFileName, vbNullChar) - 1)
    Next
    GetFiles = aFiles
done:
    CloseClipboard
End Function

Private Function GetFilenameFromPath(ByVal strPath As String) As String
'
' Получение имени файла из имени и пути
'
    If Right$(strPath, 1) <> "\" And Len(strPath) > 0 Then
        GetFilenameFromPath = GetFilenameFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1)
    End If
End Function

Sub PasleOneLinkFromClipdoard()
'
' Вставить в текущую ячейку гиперссылку на файл/каталог, скопированный в буфер обмена, если он один
'
    Dim A() As String, fileCount As Long, i As Long
    A = GetFiles(fileCount)
    If (fileCount <> 1) Then
        MsgBox "Эй, чувак! Нет файлов или каталогов в буфере обмена или их больше одного."
    End If
    
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=A(0) ', TextToDisplay:=GetFilenameFromPath(a(0))
End Sub



Вопросы и замечания принимаются.
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38086421
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что тут замечать? Для тех, кто занимается копипастой ссылок на файлы в промышленных масштабах — must have :)
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38086427
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя одно улучшение сделать можно: выпилить нахер текст "Эй, чувак". Вдруг за компом милая дама?
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38198321
avmedv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как сделать, чтобы работало под Windows 64-bit?!
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38199144
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avmedv,

В Windows x64, Office x32 всё работает хорошо. Возможно Office x64? Тогда должно помочь декларация всех функций с ключевым словом PtrSafe
Код: vbnet
1.
Private Declare Function IsClipbble Lib "user32" (ByVal uFormat As Long) As Long
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38199503
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибочка...
Код: vbnet
1.
Private Declare PtrSafe Function IsClipbble Lib "user32" (ByVal uFormat As Long) As Long
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38200141
avmedv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

УРА!! Все работает!
Люди, огромное Вам человеческое спасибо!
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38200182
avmedv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD, а можно сделать, чтобы работал в режиме совместного доступа?
У меня выдает ошибку error-1004.
...
Рейтинг: 0 / 0
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #38268281
Wyfinger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложил этот макрос на гитхабе: https://github.com/wyfinger/Excel_PasteLink .
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
    #39479688
Ilgar Gadirov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wyfinger, Низкий Вам поклон! Спасибо огромное!!!!!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]