Excel vba - скопируйте первый набор символов в activecell перед пробелом

Вот что у меня есть на данный момент. Немедленное окно показывает результат, который я хочу, но буфер обмена остается без этого результата. Я хочу, чтобы эти символы были в буфере обмена.

Sub CopyFirst()
Dim position As Integer
Dim substring As String
position = InStr(ActiveCell, " ")
If (position > 0) Then
    substring = Left(ActiveCell, position - 1)
     Debug.Print substring

End If
End Sub

просто поместите этот текст в любую пустую ячейку, а затем Range.Copy

cyboashu 13.09.2018 20:02

не подходящее решение

Alex 13.09.2018 20:11

@Alex Вы пробовали мое решение для позднего связывания?

dwirony 13.09.2018 20:16
0
3
112
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

В вашем коде еще нет ничего, что касалось бы буфера обмена. Добавьте ссылку на библиотеку Microsoft Forms 2.0, если у вас ее еще нет.

Sub CopyFirst()
Dim position As Integer
Dim substring As String
position = InStr(ActiveCell, " ")
If (position > 0) Then
    substring = Left(ActiveCell, position - 1)

    Dim MyText As DataObject
    Set MyText = New DataObject

    On Error Resume Next
    MyText.setText substring
    MyText.PutInClipboard

End If
End Sub

Ошибка компиляции: «Пользовательский тип не определен» в строке MyText As DataObject

Alex 13.09.2018 20:03

@Alex Если вы хотите использовать это решение, вам понадобится раннее связывание, иначе вы должны добавить справочную библиотеку «Библиотека объектов Microsoft Forms 2.0». Альтернативой является использование позднего связывания, когда вместо этого вы объявляете объект.

dwirony 13.09.2018 20:08

@dwirony - Я добавил справочную библиотеку «Библиотека объектов Microsoft Forms 2.0» - теперь код работает так, как ожидалось - Спасибо и нутч - пометит это как ответ. Можете ли вы порекомендовать код для добавления данных из буфера обмена, когда я переименовываю файл? У меня есть код ниже, просто нужен полный код для передачи содержимого буфера обмена в качестве первого набора символов в новое имя файла: Name Range ("E1") & Range ("H" & (ActiveCell.Row)). Value As Range ( "C2") & Range ("H" & (ActiveCell.Row)). Значение

Alex 13.09.2018 20:31

почему вы хотите использовать буфер обмена, а не общедоступную переменную?

nutsch 13.09.2018 20:41

@nutsch - не частично к какому-либо одному решению, но первая часть головоломки теперь решается с использованием буфера обмена, у вас есть код для второй части - для добавления данных из буфера обмена, когда я переименовываю файл? У меня есть код ниже, просто нужен полный код для передачи содержимого буфера обмена в качестве первого набора символов в новое имя файла: Name Range ("E1") & Range ("H" & (ActiveCell.Row)). Value As Range ( "C2") & Range ("H" & (ActiveCell.Row)). Значение

Alex 13.09.2018 21:21

проверьте это: stackoverflow.com/questions/9022245/…

nutsch 13.09.2018 21:24

Чтобы избежать раннего связывания:

Sub CopyFirst()

Dim position As Integer
Dim substring As String
Dim MSForms_DataObject As Object

Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

position = InStr(ActiveCell, " ")

If (position > 0) Then
    substring = Left(ActiveCell, position - 1)
End If

MSForms_DataObject.setText substring
MSForms_DataObject.PutInClipboard

Set MSForms_DataObject = Nothing

End Sub

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