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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2010, 18:16   #1
Emirates
Новичок
Джуниор
 
Регистрация: 05.09.2010
Сообщений: 4
По умолчанию Как подставить значение буфера обмена в функцию Cells.Find?

Извиняюсь за вопрос от чайника, но всё-же ...

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

Я запустил запись макроса, в принципе всё, как надо, НО: я вижу, что в коде, в качестве строки поиска, стоит строка из примера - email@email.com

Как сделать так, чтобы в качестве аргумента подставлялось значение из буфера обмена?

Кусок кода ниже:

ActiveCell.Offset(1, -7).Range("A1").Select
Selection.Copy
Sheets("database").Select
Range("A1").Select
Cells.Find(What:="email@emai.com", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate

Заранее спасибо за ответы.
Emirates вне форума Ответить с цитированием
Старый 05.09.2010, 19:01   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Попробуйте так
Код:
On Error Resume Next

Dim O_Data As New DataObject
Dim Buffer
O_Data.GetFromClipboard
Buffer = O_Data.GetText(1)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 05.09.2010, 19:09   #3
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

А зачем из буфера? Может лучше сразу из ячейки брать? Я думаю, Вы копируете-то все равно значение из ячейки...
Код:
Cells.Find(What:=Range("A1").Value, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Вместо Range("A1") свой адрес ячейки.
Можно брать из ячейки неполное значение:
Код:
Mid$(Range("A1"),2,2)
получится строка из 2-х букв, начиная со 2-й буквы значения ячейки А1.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 05.09.2010, 19:15   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

doober забыл добавить, что для работы этой фишки надо подключить Microsoft Forms 2.0 Object Library
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.09.2010, 19:21   #5
Emirates
Новичок
Джуниор
 
Регистрация: 05.09.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
doober забыл добавить, что для работы этой фишки надо подключить Microsoft Forms 2.0 Object Library
Боюсь уйти в офтопик, но - как подключить Microsoft Forms 2.0 Object Library?

На всякий случай - у меня стоит достаточно простая задача. Мне нужно в маленькую базу данных дописать номер сотрудника из большой (полной) базы данных. Задача разовая, так что, может нет смысла что-то дополнительное инсталлировать?
Emirates вне форума Ответить с цитированием
Старый 05.09.2010, 19:23   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Подключить - самое простое: добавить в проект форму, а затем её удалить.
Но вообще я бы тоже не городил буфера и селекты - намного проще сделать типа так:

Sub tt()
x = ActiveCell.Offset(1, -7)
Sheets("database").Select
Sheets("database").Cells.Find(What: =x, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False).Activate
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.09.2010, 19:29   #7
Emirates
Новичок
Джуниор
 
Регистрация: 05.09.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Попробуйте так
Dim O_Data As New DataObject
Dim Buffer
O_Data.GetFromClipboard
Buffer = O_Data.GetText(1)[/CODE]
Попробовал сделать так, как написали:

Dim O_Data As New DataObject
Dim membermail As String

ActiveCell.Offset(1, -7).Range("A1").Select
O_Data.GetFromClipboard
membermail = O_Data.GetText(1)
Sheets("database").Select
Range("A1").Select
Cells.Find(What:=membermail, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate

================

Но выполнение макроса обрывается ошибкой:

Compile error
User defined type not defined

Emirates вне форума Ответить с цитированием
Старый 05.09.2010, 19:38   #8
Emirates
Новичок
Джуниор
 
Регистрация: 05.09.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Но вообще я бы тоже не городил буфера и селекты - намного проще сделать типа так:
Спасибо огромное!

Заработала вот такая конструкция:

Sub abc()
x = ActiveCell.Offset(1, -7)
Sheets("database").Select
Sheets("database").Cells.Find(What: =x, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False).Activate
ActiveCell.Offset(0, 7).Range("A1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("update").Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
End Sub

===============

Теперь только нужно организовать цикл (до тех пор, пока значение переменной x не будет равно "пусто") и дело в шляпе!

Пойду читать инструкцию ...

Ещё раз спасибо!
Emirates вне форума Ответить с цитированием
Старый 05.09.2010, 19:38   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Честно пытася победить Ваш код с селектами - не вышло
Так зато работает, без всяких буферов:
Код:
Sub tttt()
x = ActiveCell.Offset(1, -7) 'хотя и здесь можно иначе сделать, без ActiveCell
Set y = Sheets("database").Cells.Find(What:=x, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False)
'и если уж так очень надо, в финале
Sheets("database").Select
y.Activate
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.09.2010, 19:41   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Что-то у Вас слишком сложно, я даже так сразу всю конструкцию не пойму... Наверняка можно проще и быстрее без селектов сделать...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 05.09.2010 в 20:00.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти значение на другом листе и подставить значение следующей ячейки ElenaNTro Microsoft Office Excel 12 11.02.2019 12:44
очистка буфера обмена beegl Общие вопросы Delphi 21 04.01.2017 11:01
Как узнать что в содержимое буфера обмена добавилось что либо? zotox Общие вопросы Delphi 2 15.09.2009 12:07
Контроль буфера обмена AndrzejX Общие вопросы Delphi 8 20.02.2009 07:30