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

Код: 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
20.12.2012, 11:45
    #38086421
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
А что тут замечать? Для тех, кто занимается копипастой ссылок на файлы в промышленных масштабах — must have :)
...
Рейтинг: 0 / 0
20.12.2012, 11:49
    #38086427
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
Хотя одно улучшение сделать можно: выпилить нахер текст "Эй, чувак". Вдруг за компом милая дама?
...
Рейтинг: 0 / 0
26.03.2013, 11:03
    #38198321
avmedv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
А как сделать, чтобы работало под Windows 64-bit?!
...
Рейтинг: 0 / 0
26.03.2013, 17:43
    #38199144
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PasteLink - макрос на VBA для Excel для вставки гипперссылки на файл в буфере обмена
avmedv,

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

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


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