Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2012, 10:21   #1
wyfinger
 
Регистрация: 27.12.2011
Сообщений: 7
По умолчанию PasteLink - простой макрос на VBA для Excel для вставки в ячейку гипперссылки на файл в буфере обмена.

Сделал для себя небольшой скрипт - очень выручает в повседневной работе.

Код:
'
' PasteLink - простой макрос на VBA для Excel для вставки в ячейку гипперссылки
' на файл, лежащий в буфере обмена.
' 
' Для установки необходимо добавить новый модуль в шаблоне по умолчанию (PERSONAL.XLSB),
' скопировать в него данный код и повесить на удобное сочетание клавиш макрос PasleOneLinkFromClipdoard()
' (я использую сочетание Ctrl+E).
'
' При вызове макроса (нажатии выбранного сочетания клавиш) в текущую ячейку будет вставлена
' гиперссылка (если в ячейке есть текст - добавлена ссылка, если нет - будет вставлен
' путь к файлу в буфере и гиперссылка.
'
' Wyfinger (wyfinger@yandex.ru)
' 

Attribute VB_Name = "PasteLink"
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()
Attribute PasleOneLinkFromClipdoard.VB_ProcData.VB_Invoke_Func = "e\n14"
'
' Вставить в текущую ячейку гиперссылку на файл/каталог, скопированный в буфер обмена, если он один
'
    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
Вопросы и замечания принимаются.
wyfinger вне форума Ответить с цитированием
Старый 20.12.2012, 13:26   #2
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

у меня ругается вот на эти строки:
Код:
Attribute VB_Name = "PasteLink"
Attribute PasleOneLinkFromClipdoard.VB_ProcData.VB_Invoke_Func = "e\n14"
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 20.12.2012, 14:10   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

staniiislav
А если скопировать все в текстовик и сохранить как PasteLink.bas.
И потом этот файл импортировать в проект VBA
Все заработает
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 20.12.2012, 14:20   #4
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

doober
Понятно . Я пользуюсь VBA только в экселе, отдельно программы VBA не устанавливал... Да и вообще я нуб в VBA
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 22.05.2013, 14:10   #5
wyfinger
 
Регистрация: 27.12.2011
Сообщений: 7
По умолчанию

Выложил этот макрос на гитхабе: https://github.com/wyfinger/Excel_PasteLink.
wyfinger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос для вставки в другой файл данные Nick31 Помощь студентам 1 15.05.2012 16:16
Макрос для вставки картинки из эксель КТатьяна Microsoft Office Excel 0 02.05.2011 12:46
для работы написать макрос для Excel и Word.... smanna Microsoft Office Excel 2 30.11.2010 12:43
Надо макрос для Excel для перестановки букв dionisprf Microsoft Office Excel 2 10.06.2009 06:04
Макрос VBA EXCEl - простановка в ячейку номера страницы Обыватель Microsoft Office Excel 1 14.02.2008 12:49