Здравствуйте. Хочется получить (вырезку как в Worde) значений и форматирования чисел и вставку их в другой место в минимум действий. Вырезка Экселя не подходит, так как она вырезает всё.
Сейчас как делаю: выделяю исходный диапазон, копирую, встаю в другую ячейку, вставляю значения и форматирование чисел, эскейп (убираю выделение), выделяю исходный диапазон, удаляю значения. Так как много приходится делать этих операций, из разных мест копирую в разные места вставляю, то хотелось бы ускорить процесс.
Понимаю, что Эксель не текстовый редактор и такого удобства по работе с текстом не будет, но все же интересно можно ли что-то придумать? Пробовал править код макроредактора, но получаю только ошибки.
Настя_Nastya, да работает вставка, спасибо). Теперь, надо очистить контент Selection.ClearContents внтури диапазона Application.CutCopyMode? То есть эксель выделяет пунктиром после копирования исходную область, получается, что надо вытащить адрес этого диапазона и прописать его после Selection.ClearContents
Неа, тогда попробуйте одним макросом копировать, а другим вставлять
Код
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
в случае когда исходный и новый диапазон накладываются макрос выдает ошибку 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
При добавлении в модуль книги макроса с данной темы
Код
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
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,ничего не понятно - переместите макросы из и модуля созданного в модуль книги и еще вы контролируете значение в Select Case Range("X3"), но у вас там пусто...
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". Сейчас там пусто, но в процессе работы туда записывается значение. Проблема возникла только после добавления в книгу макроса из данной темы. Без него все работает хорошо.
Попробуйте вариант Насти из сообщ. #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 ниже).
Михаил Лебедев написал: А еще лучше - просто s на какую-н. другую переменную
а чем другая переменная лучше S это мне напонимание случай у нас, на военной кафедре: преподаватель (подполковник): -- пусть количество танков будет Х... нет мало, пусть будет У! (и для ясности, "у нас, на военной кафедре": я был на стороне курсантов, а не преподавателем у доски))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Наличие двух переменных с одинаковым именем "s" приводит к конфликту имен. Сначала объявлена Publi-чная переменная "s" (т.е. видимая программой отовсюду) как Range, а потом в макросе листа - используется не объявленная переменная "s" Сообщение #8 прочитайте и внимательно посмотрите код
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
Ігор Гончаренко написал: преподаватель (подполковник):-- пусть количество танков будет Х... нет мало, пусть будет У!
да, военные - те еще приколисты. Набор их стандартных шуток (по-видимому разрешенных Уставом) широко известен в узком кругу их почитателей и про пластинчатую пластину, и про то, что диаметр круга приблизительно равен двум радиусам, и про 3 зеленых свистка, которые послужат сигналом к атаке...
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/