Страницы: 1
RSS
Универсальный макрос вставки значений и форматирования чисел из буфера обмена в выделенную ячейку. Возможно ли?
 
Здравствуйте. Хочется получить (вырезку как в Worde) значений и форматирования чисел и вставку их в другой место в минимум действий. Вырезка Экселя не подходит, так как она вырезает всё.

Сейчас как делаю: выделяю исходный диапазон, копирую, встаю в другую ячейку, вставляю значения и форматирование чисел, эскейп (убираю выделение), выделяю исходный диапазон, удаляю значения.
Так как много приходится делать этих операций, из разных мест копирую в разные места вставляю, то хотелось бы ускорить процесс.

Понимаю, что Эксель не текстовый редактор и такого удобства по работе с текстом не будет, но все же интересно можно ли что-то придумать?
Пробовал править код макроредактора, но получаю только ошибки.

Описание задачи также внутри примера.
Изменено: maxrus163 - 16.09.2020 10:14:53
 
Здравствуйте! попробуйте этот код:
Код
Sub Paste ()
Selection.PasteSpecial xlPasteValues
Selection.PasteSpecial xlPasteFormats
End Sub
Изменено: Настя_Nastya - 16.09.2020 11:06:28
 
Настя_Nastya, да работает вставка, спасибо). Теперь, надо очистить контент Selection.ClearContents внтури диапазона Application.CutCopyMode? То есть эксель выделяет пунктиром после копирования исходную область, получается, что надо вытащить адрес этого диапазона и прописать его после Selection.ClearContents
Изменено: maxrus163 - 16.09.2020 11:24:11
 
Неа, тогда попробуйте одним макросом копировать, а другим вставлять
Код
Public s As Range
Sub Copy()
Set s = Selection
s.Copy
End Sub
Sub Paste()
Selection.PasteSpecial xlPasteValues
Selection.PasteSpecial xlPasteFormats
s.ClearContents
End Sub
Изменено: Настя_Nastya - 16.09.2020 11:33:12
 
Настя_Nastya,спасибо большое) то что нужно)

в случае когда исходный и новый диапазон накладываются макрос выдает ошибку run-time error "1004". Возможно ли, в таком случае, научить его  удалять ту часть диапазона которая не наложилась? Если это заморочно, то хотя бы чтобы не удалял исходный вообще и не вылезала ошибка, лишние строки вручную буду удалять.
 
Нашел решение в случае наложения диапазонов копирования и вставки - копирование через "буферные ячейки". Надо определить на листе свободные ячейки, куда будут копироваться данные. После выполнения вставки буферные ячейки очищаются.
Код
Public s As Range
Sub Copy()
Application.ScreenUpdating = False
Set s = Selection
s.Copy
Range("N2:S2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
s.ClearContents
Selection.Copy
s.Select
     End Sub
Sub Paste()
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Range("N2:S22").ClearContents
End Sub
Изменено: maxrus163 - 18.09.2020 07:57:37
 
Выделите нужный диапазон. Возьмите за край и с нажатой Shift перетащите ниже. Отпустите.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
При добавлении в модуль книги макроса с данной темы
Код
Public s As Range
Sub Copy()
Application.ScreenUpdating = False
Set s = Selection
s.Copy
Range("N2:S2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
s.ClearContents
Selection.Copy
s.Select
     End Sub
Sub Paste()
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
Range("N2:S22").ClearContents
End Sub
начала вылазить ошибка
Run-time Error 91 - Object Variable or with Block variable not set
на ранее созданном макросе в модуле листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Range("X3")
Case 10000: s = "ЛКб!$A$1:$Q$22"
Case 2000: s = "ЛКб!$A$23:$Q$44"
Case 300: s = "ЛКб!$A$45:$Q$66"
Case 40: s = "ЛКб!$A$67:$Q$88"
Case 5: s = "ЛКб!$A$89:$Q$110"
Case 12000: s = "ЛКб!$A$1:$Q$44"
Case 12300: s = "ЛКб!$A$1:$Q$66"
Case 12340: s = "ЛКб!$A$1:$Q$88"
Case 12345: s = "ЛКб!$A$1:$Q$110"
Case 2300: s = "ЛКб!$A$23:$Q$66"
Case 2340: s = "ЛКб!$A$23:$Q$88"
Case 2345: s = "ЛКб!$A$23:$Q$110"
Case 340: s = "ЛКб!$A$45:$Q$88"
Case 345: s = "ЛКб!$A$45:$Q$110"
Case 45: s = "ЛКб!$A$67:$Q$110"
End Select
Me.PageSetup.PrintArea = s 'эта строка выделена желтым
End Sub
Подскажите, пожалуйста, что подправить нужно?
Изменено: maxrus163 - 23.09.2020 09:03:19
 
maxrus163, у меня все работает...ошибок не выдает...
Не бойтесь совершенства. Вам его не достичь.
 
вот пример, например в зеленом поле пробую что-то ввести - ошибка
 
maxrus163,ничего не понятно - переместите макросы из и модуля созданного в модуль книги и еще
вы контролируете значение в Select Case Range("X3"), но у вас там пусто...
Изменено: Mershik - 23.09.2020 09:39:55
Не бойтесь совершенства. Вам его не достичь.
 
В модуле "Этакнига" лежит другой макрос
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim r1 As Range, r2 As Range, r3 As Range, s As String
    If Not Sh.Name Like "ТК*" Then Exit Sub
    Set r1 = [C31:C54]: Set r2 = [C57:C80]: Set r3 = [C83:C106]
    If Intersect(Target, Union(r1, r2, r3)) Is Nothing Then Exit Sub
    Select Case 0
    Case Is < Application.CountA(r3): s = "$A$1:$T$106"
    Case Is < Application.CountA(r2): s = "$A$1:$T$80"
    Case Is < Application.CountA(r1): s = "$A$1:$T$54"
    Case Else: s = "$A$1:$T$28"
    End Select
    ActiveSheet.PageSetup.PrintArea = s
End Sub

, если туда перемещаю макрос из модуля, то не работает уже тот макрос. А макрос из модуля листа (из примера) нельзя перемещать, он должен работать только на данном листе, отслеживать значение в "X3". Сейчас там пусто, но в процессе работы туда записывается значение.
Проблема возникла только после добавления в книгу макроса из данной темы. Без него все работает хорошо.
 
maxrus163,  в таком виде у меня все работает
Не бойтесь совершенства. Вам его не достичь.
 
Методом тыка убрал из макроса строку
Код
Public s As Range

Ошибка перестала выскакивать, и макросы вроде бы работают.

Не знаю, как отразиться в дальнейшем, посмотрим.

Изменено: maxrus163 - 23.09.2020 10:42:36
 
Попробуйте вариант Насти из сообщ. #4
в новой редакции:
Код
Public s As Range
Dim arr

Sub Copy()
Set s = Selection
arr = s.Value
s.Copy
End Sub

Sub Paste()
Selection.PasteSpecial xlPasteFormats
s.ClearContents
Selection.Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Михаил Лебедев,спасибо конечно. Отличный макрос! Но у меня снова конфликт с макросом листа (см. сообщение 8 )
Причем, сначала, ошибка Run-time error "13" type mismatc, а следующие Run-time error "91". Возникает при изменении любой ячейки листа, где записан мой макрос (см. сообщение 8 ниже).
Изменено: maxrus163 - 23.09.2020 15:17:59
 
Цитата
maxrus163 написал:
Возникает при изменении любой ячейки листа, где записан мой макрос
Конфликт имен. Замените Public s ... на Dim s ...
А еще лучше - просто s на какую-н. другую переменную
Изменено: Михаил Лебедев - 23.09.2020 20:18:14 (Добавил файл)
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
универсальный макрос возможен, но вас может озадачить, сильно огорчить и просто  заставить отказаться от его использования количество настроек в нем
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Михаил Лебедев написал:
А еще лучше - просто s на какую-н. другую переменную
а чем другая переменная лучше S
это мне напонимание случай у нас, на военной кафедре:
преподаватель (подполковник):
-- пусть количество танков будет Х... нет мало, пусть будет У!
(и для ясности, "у нас, на военной кафедре": я был на стороне курсантов, а не преподавателем у доски))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
а чем другая переменная лучше S
Наличие двух переменных с одинаковым именем "s"  приводит к конфликту имен.
Сначала объявлена Publi-чная переменная "s" (т.е. видимая программой отовсюду) как Range, а потом в макросе листа - используется не объявленная переменная "s"
Сообщение #8 прочитайте и внимательно посмотрите код :)
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Ігор Гончаренко написал:
преподаватель (подполковник):-- пусть количество танков будет Х... нет мало, пусть будет У!
да, военные - те еще приколисты.
Набор их стандартных шуток (по-видимому разрешенных Уставом) широко известен в узком кругу их почитателей :)
и про пластинчатую пластину, и про то, что диаметр круга приблизительно равен двум радиусам, и про 3 зеленых свистка, которые послужат сигналом к атаке...
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Михаил Лебедев, спасибо за пояснения и решение  :) . Теперь можно по полной насладиться новым макросом )
Страницы: 1
Наверх