Вставить гиперссылку в активную ячейку из буфера обмена с помощью кнопки управления Active X?

У меня проблемы со вставкой гиперссылки из буфера обмена. Цель состоит в том, чтобы использовать кнопку Active X, чтобы вставить гиперссылку, скопированную вручную/мышью, которая находится в буфере обмена, в «Активную ячейку» на моем рабочем листе. Рабочий лист защищен, поэтому кнопка должна снять защиту листа, запустить код, чтобы вставить гиперссылку из буфера обмена, а затем защитить лист. Любая помощь по этому вопросу будет принята с благодарностью.

Основная идея: (я знаю, что этот код неверен, я использую его только для начала разговора).

Private Sub CommandButton10_Click()
ActiveSheet.Unprotect Password: = "Password1"
  Dim DataObj As MSForms.DataObject
    Set DataObj = New MSForms.DataObject
    DataObj.GetFromClipboard

    strPaste = DataObj.GetText(1)            <<<<certain something is missing after this line

    ActiveCell.Paste Link:=True
ActiveSheet.Protect Password: = "Password1"
End Sub
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

MSForms устарела. Вместо этого используйте эта функция:

Function Clipboard$(Optional s$)
    Dim v: v = s  'Cast to variant for 64-bit VBA support
    With CreateObject("htmlfile")
    With .parentWindow.clipboardData
        Select Case True
            Case Len(s): .setData "text", v
            Case Else:   Clipboard = .GetData("text")
        End Select
    End With
    End With
End Function

Вы называете это так:

Private Sub CommandButton10_Click()
    ActiveCell.Hyperlinks.Add ActiveCell, Clipboard
End Sub

В модуле кода добавьте все следующие строки точно...

Private Sub CommandButton10_Click()
    Dim s$
    s = Clipboard
    If Len(s) Then
        ActiveSheet.Unprotect Password: = "Password1"
        ActiveCell.Hyperlinks.Add ActiveCell, s
        ActiveSheet.Protect Password: = "Password1"
    End If
End Sub

Function Clipboard$(Optional s$)
    Dim v: v = s  'Cast to variant for 64-bit VBA support
    With CreateObject("htmlfile")
    With .parentWindow.clipboardData
        Select Case True
            Case Len(s): .setData "text", v
            Case Else:   Clipboard = .GetData("text")
        End Select
    End With
    End With
End Function

@DMatt Ты смог это использовать?

Excel Hero 04.05.2022 21:14

До сих пор мне не удалось заставить его работать. Поскольку я только около 15 часов изучаю VBA, я не уверен, куда поместить дополнительный код, который вы добавили в область «Вы называете это так» вашего ответа. Пока у меня есть это:

DMatt d20Gamer 04.05.2022 22:26

Я обновил этот ответ, чтобы включить часть HYPERLINK. Теперь все должно работать так, как вы ожидаете.

Excel Hero 04.05.2022 23:20

Большое тебе спасибо. Я чувствовал, что уже слишком много попросил.

DMatt d20Gamer 04.05.2022 23:25

Я сделал, и ваше решение сработало отлично. Спасибо, что помогли мне это сделать. Вы спасли меня от многих часов разочарования.

DMatt d20Gamer 04.05.2022 23:29

Добро пожаловать.

Excel Hero 04.05.2022 23:29

Excel Hero, я обнаружил небольшую, но, возможно, тревожную проблему. Если буфер обмена пуст, при нажатии кнопки Active X код не применяет "ActiveSheet.Protect Password: = "Password1". Это оставляет рабочий лист открытым для изменений. Я хотел бы, чтобы рабочий лист оставался защищенным, даже если кто-то ошибочно нажимает кнопку управления Active X без информации в буфере обмена. Есть ли в коде другое место, где может произойти повторное применение защиты, чтобы избежать этой лазейки в безопасности листа?

DMatt d20Gamer 05.05.2022 00:31

Я изменю код, чтобы учесть этот случай...

Excel Hero 05.05.2022 00:36

Пожалуйста, попробуйте обновленную процедуру управления ActiveX. Он проверяет, действительно ли буфер обмена содержит значение, прежде чем снимать защиту с рабочего листа.

Excel Hero 05.05.2022 00:41

Идеальный! Спасибо. Это снимает опасения по поводу безопасности.

DMatt d20Gamer 05.05.2022 00:59
Private Sub CommandButton43_Click()
ActiveSheet.Unprotect Password: = "Password1"
ActiveCell = Clipboard
Function Clipboard$(Optional s$)
    Dim v: v = s  'Cast to variant for 64-bit VBA support
    With CreateObject("htmlfile")
    With .parentWindow.clipboardData
        Select Case True
            Case Len(s): .setData "text", v
            Case Else:   Clipboard = .GetData("text")
        End Select
    End With
    End With
End Function
 ActiveSheet.Protect Password: = "Password1"
End Sub

Поместите функцию Clipboard() снаружи и ниже подкода.

Excel Hero 04.05.2022 22:30

Герой Excel, я уверен, что ваш код хорош, мне просто нужна последняя информация, чтобы его запустить и запустить...

DMatt d20Gamer 04.05.2022 22:30

--Поместите функцию Clipboard() снаружи и ниже подкода. - Герой Excel Извините, я не понимаю.

DMatt d20Gamer 04.05.2022 22:32

Я не могу. Я ценю предложение помочь в этом качестве, однако в настоящее время это не вариант для меня. Если бы вы хотели использовать новый язык для того, чтобы разместить идею «Буфер обмена функций () вне подкода», я был бы очень признателен.

DMatt d20Gamer 04.05.2022 22:37

Весь код должен быть помещен в модуль кода в редакторе VBA. Поэтому, куда бы вы ни поместили код своей командной кнопки, просто добавьте внизу функцию буфера обмена. Я обновлю свой первоначальный ответ, чтобы продемонстрировать...

Excel Hero 04.05.2022 22:39

Спасибо за дополнительную информацию и помощь. Я ценю ваше время и усилия.

DMatt d20Gamer 04.05.2022 22:41

Ответ обновлен сейчас.

Excel Hero 04.05.2022 22:43

Однако это начало работать, оно только вставило слова, скопированные из адресной строки Интернета. Я стремился к полной копии активной гиперссылки веб-сайта при вставке. Я, вероятно, недостаточно хорошо проинформировал вас об этой части. Лист, над которым я работаю, остается заблокированным для всех, кто его использует, но я пытаюсь добавить кнопку, с помощью которой они могут копировать и вставлять ссылки на рабочий лист. Спасибо за помощь, которую вы оказали. Извините, если я потратил ваше время.

DMatt d20Gamer 04.05.2022 22:50

Похоже, мне нужно добавить еще несколько шагов после вставки слов. Мне нужно было бы щелкнуть правой кнопкой мыши выбранную ячейку, щелкнуть левой кнопкой мыши параметр «Ссылка», вставить содержимое буфера обмена в адресную строку, а затем щелкнуть левой кнопкой мыши параметр «ОК».

DMatt d20Gamer 04.05.2022 22:58

Другие вопросы по теме