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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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