Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как заставить макрос записать в переменную содержимое буфера - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как заставить макрос записать в переменную содержимое буфера (Макросы/Sub)
Как заставить макрос записать в переменную содержимое буфера
mv6677 Дата: Четверг, 10.08.2017, 08:14 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброго времени суток, уважаемые программисты.
Помогите разобраться.

В файле xls находится макрос копирования содержимого одних ячеек - в другие ячейки.
Если скопировать в буфер обмена Автофигуру (например синий прямоугольник) - и нажать на кнопку макроса, то после окончания работы макроса - буфер обмена будет пуст.
Я хочу заставить макрос "запомнить" - что находилось в буфере обмена - до начала его (макроса) работы... и после окончания работы макроса - вновь добавить в буфер обмена предыдущее содержимое (например Автофигуру - синий прямоугольник)

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

(вопрос не в том, как копировать содержимое ячеек - минуя буфер обмена, а как заставить макрос "запомнить" что находилось в буфере обмена - перед началом работы макроса. То есть макрос должен по окончании своей работы - вставить в буфер обмена то, что было там (в буфере обмена) - ДО начала работы макроса.)
К сообщению приложен файл: 43536.xls(44Kb)
 
Ответить
СообщениеДоброго времени суток, уважаемые программисты.
Помогите разобраться.

В файле xls находится макрос копирования содержимого одних ячеек - в другие ячейки.
Если скопировать в буфер обмена Автофигуру (например синий прямоугольник) - и нажать на кнопку макроса, то после окончания работы макроса - буфер обмена будет пуст.
Я хочу заставить макрос "запомнить" - что находилось в буфере обмена - до начала его (макроса) работы... и после окончания работы макроса - вновь добавить в буфер обмена предыдущее содержимое (например Автофигуру - синий прямоугольник)

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

(вопрос не в том, как копировать содержимое ячеек - минуя буфер обмена, а как заставить макрос "запомнить" что находилось в буфере обмена - перед началом работы макроса. То есть макрос должен по окончании своей работы - вставить в буфер обмена то, что было там (в буфере обмена) - ДО начала работы макроса.)

Автор - mv6677
Дата добавления - 10.08.2017 в 08:14
RAN Дата: Четверг, 10.08.2017, 09:08 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4549
Репутация: 920 ±
Замечаний: 0% ±

2010
А НЕ очищать буфер не пробовали?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА НЕ очищать буфер не пробовали?

Автор - RAN
Дата добавления - 10.08.2017 в 09:08
mv6677 Дата: Четверг, 10.08.2017, 09:11 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
А НЕ очищать буфер не пробовали?

Я не очень хорошо разбираюсь в экселе.

Каким образом заставить макрос не очищать буфер обмена ?
(вроде бы после выполнения операции копирования - он будет занят другим содержимым)
 
Ответить
Сообщение
А НЕ очищать буфер не пробовали?

Я не очень хорошо разбираюсь в экселе.

Каким образом заставить макрос не очищать буфер обмена ?
(вроде бы после выполнения операции копирования - он будет занят другим содержимым)

Автор - mv6677
Дата добавления - 10.08.2017 в 09:11
RAN Дата: Четверг, 10.08.2017, 09:14 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4549
Репутация: 920 ±
Замечаний: 0% ±

2010
Каким образом заставить макрос не очищать буфер обмена ?

Удалить из него команду очистки буфера.
[vba]
Код
Application.CutCopyMode = False
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Каким образом заставить макрос не очищать буфер обмена ?

Удалить из него команду очистки буфера.
[vba]
Код
Application.CutCopyMode = False
[/vba]

Автор - RAN
Дата добавления - 10.08.2017 в 09:14
mv6677 Дата: Четверг, 10.08.2017, 09:29 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Удалить из него команду очистки буфера.

Удалил.
В результате - буфер обмена занимается содержимым последней операции (а не тем, что было в буфере обмена - до начала работы макроса).
К сообщению приложен файл: 6440668.xls(46Kb)
 
Ответить
Сообщение
Удалить из него команду очистки буфера.

Удалил.
В результате - буфер обмена занимается содержимым последней операции (а не тем, что было в буфере обмена - до начала работы макроса).

Автор - mv6677
Дата добавления - 10.08.2017 в 09:29
_Boroda_ Дата: Четверг, 10.08.2017, 09:32 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11545
Репутация: 4754 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А если макрос немного переписать?
[vba]
Код
Sub Макрос4()
    Range("H5") = Range("G5")
    Range("J5") = Range("I5")
    Range("L5") = Range("K5")
    Range("N5") = Range("M5")
    Range("P5") = Range("O5")
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА если макрос немного переписать?
[vba]
Код
Sub Макрос4()
    Range("H5") = Range("G5")
    Range("J5") = Range("I5")
    Range("L5") = Range("K5")
    Range("N5") = Range("M5")
    Range("P5") = Range("O5")
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 10.08.2017 в 09:32
mv6677 Дата: Четверг, 10.08.2017, 09:37 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, я же написал в первом сообщении - что вопрос не в том, как копировать содержимое ячеек, а как заставить макрос "запомнить" что находилось в буфере обмена - перед началом работы макроса. То есть макрос должен по окончании своей работы - вставить в буфер обмена то, что было там (в буфере обмена) - ДО начала работы макроса.

Я спрашивал - как в начале работы макроса записать в переменную содержимое из буфера, а после работы макроса запихать содержимое из переменной в буфер?
 
Ответить
Сообщение_Boroda_, я же написал в первом сообщении - что вопрос не в том, как копировать содержимое ячеек, а как заставить макрос "запомнить" что находилось в буфере обмена - перед началом работы макроса. То есть макрос должен по окончании своей работы - вставить в буфер обмена то, что было там (в буфере обмена) - ДО начала работы макроса.

Я спрашивал - как в начале работы макроса записать в переменную содержимое из буфера, а после работы макроса запихать содержимое из переменной в буфер?

Автор - mv6677
Дата добавления - 10.08.2017 в 09:37
RAN Дата: Четверг, 10.08.2017, 11:47 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4549
Репутация: 920 ±
Замечаний: 0% ±

2010
Ну как-то так.
Что было выделено до начала работы, то и вставится в конце.
oldSelection можно вызывать из любого места.
В конце вставится то, что было выделено на момент вызова.
[vba]
Код
Sub Макрос2()
    Dim obj As Object
    Dim rRange As Range

    GoSub oldSelection

    Range("G5").Select
    Selection.Copy
    Range("H5").Select
    ActiveSheet.Paste
    Range("I5").Select
    ActiveSheet.Shapes.Range(Array("Oval 4")).Select
    Selection.ShapeRange.IncrementLeft 13.5
    Selection.ShapeRange.IncrementTop -9.75
    Selection.Copy
    Selection.Copy
    Range("P5").Select
    ActiveSheet.Paste
    Range("K9").Select

    Range("A10").Select
    If Not rRange Is Nothing Then
        rRange.Copy Range("A10")
    Else
        obj.Select
        Selection.Copy
        Range("A10").Select
        ActiveSheet.Paste
    End If
    Exit Sub

oldSelection:
    If TypeName(Selection) = "Range" Then
        Set rRange = Selection
        Set obj = Nothing
    Else
        Set obj = Selection
        Set rRange = Nothing
    End If
    Return
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНу как-то так.
Что было выделено до начала работы, то и вставится в конце.
oldSelection можно вызывать из любого места.
В конце вставится то, что было выделено на момент вызова.
[vba]
Код
Sub Макрос2()
    Dim obj As Object
    Dim rRange As Range

    GoSub oldSelection

    Range("G5").Select
    Selection.Copy
    Range("H5").Select
    ActiveSheet.Paste
    Range("I5").Select
    ActiveSheet.Shapes.Range(Array("Oval 4")).Select
    Selection.ShapeRange.IncrementLeft 13.5
    Selection.ShapeRange.IncrementTop -9.75
    Selection.Copy
    Selection.Copy
    Range("P5").Select
    ActiveSheet.Paste
    Range("K9").Select

    Range("A10").Select
    If Not rRange Is Nothing Then
        rRange.Copy Range("A10")
    Else
        obj.Select
        Selection.Copy
        Range("A10").Select
        ActiveSheet.Paste
    End If
    Exit Sub

oldSelection:
    If TypeName(Selection) = "Range" Then
        Set rRange = Selection
        Set obj = Nothing
    Else
        Set obj = Selection
        Set rRange = Nothing
    End If
    Return
End Sub
[/vba]

Автор - RAN
Дата добавления - 10.08.2017 в 11:47
mv6677 Дата: Четверг, 10.08.2017, 12:11 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
RAN, использовал ваш код.
Что-то не работает.
Копирую синий прямоугольник, жму на кнопку макроса, затем пытаюсь вставит содержимое буфера обмена - и эксель сигналит что буфер обмена - пустой.
К сообщению приложен файл: 0504678.xls(52Kb)
 
Ответить
СообщениеRAN, использовал ваш код.
Что-то не работает.
Копирую синий прямоугольник, жму на кнопку макроса, затем пытаюсь вставит содержимое буфера обмена - и эксель сигналит что буфер обмена - пустой.

Автор - mv6677
Дата добавления - 10.08.2017 в 12:11
RAN Дата: Четверг, 10.08.2017, 12:52 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4549
Репутация: 920 ±
Замечаний: 0% ±

2010
А не надо копировать. Нужно просто выделить.
Или скопировать, но потом никуда по ячейкам не щелкать.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА не надо копировать. Нужно просто выделить.
Или скопировать, но потом никуда по ячейкам не щелкать.

Автор - RAN
Дата добавления - 10.08.2017 в 12:52
mv6677 Дата: Четверг, 10.08.2017, 13:33 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
RAN, теперь понятно.
Спасибо
 
Ответить
СообщениеRAN, теперь понятно.
Спасибо

Автор - mv6677
Дата добавления - 10.08.2017 в 13:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как заставить макрос записать в переменную содержимое буфера (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!