У меня какая задача. Есть отдельная табличка, которую я копирую, заношу ее в буфер обмена. Далее я иду в другую книгу, и через кнопку "Вставить" вставляю данную табличку.
'If MsgBox("Очистить лист?", vbOKCancel + vbExclamation, "Очистить?") = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents If ActiveSheet.Name = "Affinity" Then ' условие проверяет имя активного листа. Если оно = Affinity Range(Cells(1, 1), Cells(NumRow, NumCol)).ClearContents ' чистим лист Cells(1, 1).Select ' выделяем первую ячейку
On Error Resume Next Selection.PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Нечего вставлять или Ошибка: " & Err.Number & vbCrLf & Err.Description End If
[/vba]
И все бы нечего, но при чистке диапазона, стирается все что было в буфере обмена. И вставить ничего не получается. А диапазон старой таблицы перед вставкой новой, нужно удалить...
Спасибо.
Добрый день.
У меня какая задача. Есть отдельная табличка, которую я копирую, заношу ее в буфер обмена. Далее я иду в другую книгу, и через кнопку "Вставить" вставляю данную табличку.
'If MsgBox("Очистить лист?", vbOKCancel + vbExclamation, "Очистить?") = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents If ActiveSheet.Name = "Affinity" Then ' условие проверяет имя активного листа. Если оно = Affinity Range(Cells(1, 1), Cells(NumRow, NumCol)).ClearContents ' чистим лист Cells(1, 1).Select ' выделяем первую ячейку
On Error Resume Next Selection.PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Нечего вставлять или Ошибка: " & Err.Number & vbCrLf & Err.Description End If
[/vba]
И все бы нечего, но при чистке диапазона, стирается все что было в буфере обмена. И вставить ничего не получается. А диапазон старой таблицы перед вставкой новой, нужно удалить...
если даже на отдельную кнопку сделаю очистить, то из буфера обмена, все равно удаляется информация. Хотелось бы максимально упростить процесс замены таблицы. Так то код у меня предварительно все чистить. Вопрос, можно ли не трогать буфер обмена при чистке листа.
если даже на отдельную кнопку сделаю очистить, то из буфера обмена, все равно удаляется информация. Хотелось бы максимально упростить процесс замены таблицы. Так то код у меня предварительно все чистить. Вопрос, можно ли не трогать буфер обмена при чистке листа.lopuxi
'If MsgBox("Очистить лист?", vbOKCancel + vbExclamation, "Очистить?") = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents If ActiveSheet.Name = "Affinity" Then ' условие проверяет имя активного листа. Если оно = Affinity On Error Resume Next Cells(1, NumCol + 1).PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Нечего вставлять или Ошибка: " & Err.Number & vbCrLf & Err.Description
Range("A1").Resize(, NumCol).EntireColumn.Delete ' чистим лист End If End Sub
[/vba]
А если вот так попробовать? Сначала вставляем справа, а потом удаляем столбцы, которые были [vba]
'If MsgBox("Очистить лист?", vbOKCancel + vbExclamation, "Очистить?") = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents If ActiveSheet.Name = "Affinity" Then ' условие проверяет имя активного листа. Если оно = Affinity On Error Resume Next Cells(1, NumCol + 1).PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Нечего вставлять или Ошибка: " & Err.Number & vbCrLf & Err.Description
Range("A1").Resize(, NumCol).EntireColumn.Delete ' чистим лист End If End Sub
Сначала вставляем справа, а потом удаляем столбцы, которые были
Идея хорошая, только у тебя он колонки удаляет, вместе со вставленной таблицей. Ну по крайней мере я у себя вставил твой код и он у меня все почикал)
И мне бы не колонки удалить надо а строки, под диапазоном, после вставки. Excel вставленный объект выделяет, а значит знает его диапазон и последнюю строку.
Как бы мне получить эту последнюю строку что бы после нее все удалить? Есть идеи?
Сначала вставляем справа, а потом удаляем столбцы, которые были
Идея хорошая, только у тебя он колонки удаляет, вместе со вставленной таблицей. Ну по крайней мере я у себя вставил твой код и он у меня все почикал)
И мне бы не колонки удалить надо а строки, под диапазоном, после вставки. Excel вставленный объект выделяет, а значит знает его диапазон и последнюю строку.
Как бы мне получить эту последнюю строку что бы после нее все удалить? Есть идеи?lopuxi
О_о ...и так можно было?
Сообщение отредактировал lopuxi - Среда, 10.02.2016, 12:59
у тебя он колонки удаляет, вместе со вставленной таблицей. Ну по крайней мере я у себя вставил твой код и он у меня все почикал)
А у меня не почикал, а отработал именно так, как было описано в первом посте. Я же не виноват, что Ваше описание расходится с реальными действиями и что файлы Вы не приложили?
у тебя он колонки удаляет, вместе со вставленной таблицей. Ну по крайней мере я у себя вставил твой код и он у меня все почикал)
А у меня не почикал, а отработал именно так, как было описано в первом посте. Я же не виноват, что Ваше описание расходится с реальными действиями и что файлы Вы не приложили?
Ваше описание расходится с реальными действиями и что файлы Вы не приложили?
Я сначала не понял вашу логику, что происходит удаление старой таблицы слева, а новая вставляется справа. И почему то он у меня не вставил таблицу справа.
Я не думал что потребуется файл, вроде казалось все легко. Сейчас прикладываю файл. В нем есть таблица, она может быть разной длинны. Ее приходится заменять в книге, которая из данной таблицы черпает нужные себе данные. Всю книгу я прикладывать не стал, она по размеру сюда просто не входит. По этому приложил конкретный лист, с кодом, таблицей и кнопкой. На соседний лист поместил копию таблицы.
Что делает пользователь, он из отдельной книги, берет эту таблицу Ctrl+C и вставляет. И тут часто возникает проблемы, что диапазон заранее не был почищен и вставляют поверх старой. Ну я и подумал сделать кнопку - чистка/вставка, сразу и то и другое делает.
Ваше описание расходится с реальными действиями и что файлы Вы не приложили?
Я сначала не понял вашу логику, что происходит удаление старой таблицы слева, а новая вставляется справа. И почему то он у меня не вставил таблицу справа.
Я не думал что потребуется файл, вроде казалось все легко. Сейчас прикладываю файл. В нем есть таблица, она может быть разной длинны. Ее приходится заменять в книге, которая из данной таблицы черпает нужные себе данные. Всю книгу я прикладывать не стал, она по размеру сюда просто не входит. По этому приложил конкретный лист, с кодом, таблицей и кнопкой. На соседний лист поместил копию таблицы.
Что делает пользователь, он из отдельной книги, берет эту таблицу Ctrl+C и вставляет. И тут часто возникает проблемы, что диапазон заранее не был почищен и вставляют поверх старой. Ну я и подумал сделать кнопку - чистка/вставка, сразу и то и другое делает.lopuxi
'If MsgBox("Очистить лист?", vbOKCancel + vbExclamation, "Очистить?") = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents If ActiveSheet.Name = "Affinity" Then ' условие проверяет имя активного листа. Если оно = Affinity Cells(1, 1).Select ' выделяем первую ячейку
On Error Resume Next Selection.PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Нечего вставлять или Ошибка: " & Err.Number & vbCrLf & Err.Description
r = Selection.Rows.Count - 1 Range(Cells(r + 2, 1), Cells(NumRow, NumCol)).ClearContents ' чистим лист End If End Sub
[/vba]
всем спасибо большое за помощь и участие
_Boroda_, Спасибо большое. Насамом деле Вы навели меня на хорошую мысль показали как ее можно реализоваться.
Я сделал то что хотел. Код выполняет то что мне нужно. [vba]
'If MsgBox("Очистить лист?", vbOKCancel + vbExclamation, "Очистить?") = vbOK Then: Range(Cells(2, 2), Cells(NumRow, NumCol + 3)).ClearContents If ActiveSheet.Name = "Affinity" Then ' условие проверяет имя активного листа. Если оно = Affinity Cells(1, 1).Select ' выделяем первую ячейку
On Error Resume Next Selection.PasteSpecial Paste:=xlValues ' вставляем как значение If Err Then Err.Clear: ActiveSheet.PasteSpecial Paste:=xlValues If Err Then Err.Clear: ActiveSheet.PasteSpecial Format:="Текст", Link:=False, DisplayAsIcon:=False If Err Then MsgBox "Нечего вставлять или Ошибка: " & Err.Number & vbCrLf & Err.Description
r = Selection.Rows.Count - 1 Range(Cells(r + 2, 1), Cells(NumRow, NumCol)).ClearContents ' чистим лист End If End Sub