Vba pastespecial ошибка

I have looked thoroughly at the current answers for this problem and none of them have fixed mine.

The operation is simply copying a selection of a sheet and copying to a new book called budget.

Again I have tried multiple different ways of doing the same thing and none of them seem to change this error. The select method works,it only breaks when I try to paste.

Code:

Range("B3").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Dim wk As Workbook
Set wk = Workbooks.Add

wk.SaveAs FileName:=ThisWorkbook.path & "\" & "Budget.xlsx"
wk.Activate
wk.Unprotect
wk.Worksheets("Sheet1").Range("B3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

Thanks,

YowE3K's user avatar

YowE3K

23.9k7 gold badges26 silver badges40 bronze badges

asked Jul 19, 2017 at 16:12

Justtheintern's user avatar

2

If you try exactly the steps in the code manually, you will find it also fails. The issue is that inbetween copying the cells and trying to paste them, you are creating a new workbook and saving it. This cancels copy/paste mode (i.e. the «marching ants» around the copied range disappear), so there is nothing to paste.

The solution is to not use Selection at all. In general any time you find yourself writing .Select in VBA you’re doing it wrong (see this question for detail). Here is how I would re-write your code:

Dim wk As Workbook

Set wk = Workbooks.Add
wk.SaveAs Filename:=ThisWorkbook.Path & "\" & "Budget.xlsx"

ThisWorkbook.Range("B3").CurrentRegion.Copy
wk.Worksheets("Sheet1").Range("B3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

answered Jul 19, 2017 at 16:26

aucuparia's user avatar

aucupariaaucuparia

2,02120 silver badges27 bronze badges

Try the code below (explanation inside the code as comments):

Dim wk As Workbook
Set wk = Workbooks.Add

wk.SaveAs Filename:=ThisWorkbook.Path & "\" & "Budget.xlsx"
wk.Activate
wk.Unprotect

' have the Copy>>Paste section together
Dim LastCol As Long
Dim LastRow As Long

' you never mentioned which sheet to copy from, I used the first index
With ThisWorkbook.Sheets(1)
    LastCol = .Range("B3").End(xlToRight).Column
    LastRow = .Range("B3").End(xlDown).Row
    .Range("B3", .Cells(LastRow, LastCol)).Copy ' <-- Copy without Select
End With

' Paste without Select
wk.Worksheets("Sheet1").Range("B3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

answered Jul 19, 2017 at 16:30

Shai Rado's user avatar

Shai RadoShai Rado

33.1k6 gold badges29 silver badges51 bronze badges

1

pasteSpecial из worksheet завершен неверно (Excel 2016)

Shurakm

Дата: Среда, 04.10.2017, 15:46 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Здравствуйте!
Есть кусок кода vba, который прекрасно работал с 2003 по 2010 Excel
А вот для Excel2016 (windows 10) на тех же файлах выдает ошибку:
Метод pasteSpecial из класса worksheet завершен неверно

[vba]

Код

Sub CopySheetFormules(fromSheet As Worksheet, toSheet As Worksheet)
  fromSheet.Activate
  fromSheet.Cells.Copy
  toSheet.Activate
  toSheet.Cells(1, 1).select

  ActiveSheet.PasteSpecial Format:=7, Link:=False, DisplayAsIcon:=False ‘ здесь падает
  toSheet.Cells(1, 1).select
End Sub

[/vba]

Что тут может быть неверным?

Приложить пример затруднительно — все файлы большие и разные, все прекрасно работали на предыдущих версиях Excel
Тут скорей вопрос про Excel 2016

Сообщение отредактировал ShurakmСреда, 04.10.2017, 16:21

 

Ответить

KuklP

Дата: Среда, 04.10.2017, 18:14 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Чепуха какая-то. Вы с листа на лист копируете ВСЕ ячейки каким-то инвалидным способом:
[vba]

Код

PasteSpecial Format:=7, Link:=False, DisplayAsIcon:=False

[/vba]Зачем? Откуда и что Вы таким кодом копируете?


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Shurakm

Дата: Среда, 04.10.2017, 18:40 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Сорри за сумбур…
Я в vba даже не любитель. Код не мой и очень древний.

Берется шаблон из БД (Excel 2007), копируются листы из него в новую книгу (Excel 2016).
[vba]

Код

fromBook.Sheets(arr).Copy after:=toBook.Sheets(toBook.Sheets.count)

[/vba]

А потом вот эта странная функция (CopySheetFormules) для каждого листа должна по идее отдельно скопировать формулы (присутствует коммент типа — «а то при копировании есть ограничение 255 символов»)
Может старое ограничение, может еще что
Вот вроде параметр Format:=7 — это xlAllExceptBorders, а совсем не формулы как указано

 

Ответить

KuklP

Дата: Среда, 04.10.2017, 18:48 |
Сообщение № 4

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

А вот нифига!
xlAllExceptBorders это не параметр Format, это параметр paste:

Цитата

Range.PasteSpecial Method
Pastes a Range from the Clipboard into the specified range.
Syntax
expression.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)
expression A variable that represents a Range object.
Parameters
Name Required/Optional Data Type Description
Paste Optional XlPasteType . The part of the range to be pasted.

Поэтому вместо Вашей помойки:
[vba]

Код

Sub CopySheetFormules(fromSheet As Worksheet, toSheet As Worksheet)
    fromSheet.UsedRange.Copy
    toSheet.Cells(1, 1).PasteSpecial xlPasteFormulas
End Sub

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСреда, 04.10.2017, 18:49

 

Ответить

Shurakm

Дата: Среда, 04.10.2017, 18:51 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Выкинул в паре шаблонов указанный блок с дополнительным копирование как бы длинных формул — все заработало
Но.. этих шаблонов много и возможно в каком-то из них есть эти пресловутые длинные формулы
Т.е. теоретически задачу можно свести к переделыванию всех шаблонов (выкинуть этот блок) и тщательной проверке результата
Однако это немаленькая задача :)

 

Ответить

Shurakm

Дата: Среда, 04.10.2017, 18:56 |
Сообщение № 6

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Поэтому вместо Вашей помойки:

[vba]

Код

Sub CopySheetFormules(fromSheet As Worksheet, toSheet As Worksheet)
    fromSheet.UsedRange.Copy
    toSheet.Cells(1, 1).PasteSpecial xlPasteFormulas
End Sub

[/vba]

Попробовал… Теперь ошибка «Метод pasteSpecial из класса Range завершен неверно»

 

Ответить

KuklP

Дата: Среда, 04.10.2017, 19:03 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Было:

на тех же файлах выдает ошибку:
Метод pasteSpecial из класса worksheet завершен неверно

Стало:

Теперь ошибка «Метод pasteSpecial из класса Range завершен неверно»

:D Как минимум ничего не потеряли. Тогда надо видеть файлы. только не

все файлы большие и разные

а пара НЕБОЛЬШИХ для примера, где длина формулы >255.
И еще — объединенные ячейки тоже могут вызывать такую ошибку.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСреда, 04.10.2017, 19:06

 

Ответить

KuklP

Дата: Среда, 04.10.2017, 19:35 |
Сообщение № 8

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Но вообще-то чепуха. Как правило не делаю примеров за ТС, но.. В F1 длина формулы 1542 знака, что по мне так запредельный изврат. Но все копируется и как формулы и как просто копирование:
[vba]

Код

Public Sub www()
    [a1].CurrentRegion.Copy
    [Лист2!a1].PasteSpecial xlPasteFormulas
End Sub
Public Sub www1()
    [a1].CurrentRegion.Copy [Лист2!a1]
End Sub

[/vba]

К сообщению приложен файл:

1111.xlsm
(17.8 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСреда, 04.10.2017, 19:36

 

Ответить

Shurakm

Дата: Четверг, 05.10.2017, 11:18 |
Сообщение № 9

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Спасибо за помощь
На самом деле что-то непонятное и главное не могу выявить смысл этого куска кода (отчеты монструозные)

МСДН утверждает, что Format:=7 не бывает (https://msdn.microsoft.com/VBA….d-excel)
Только от 0 до 5

А в другом месте ([url=https://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.worksheet.pastespecial(v=vs.120).aspx]msdn[/url]) предлагает вводить текстовый параметр
Если вы не знаете, какую строку передавать параметру Format, можно просмотреть строки, которые совместимы с данными в буфере обмена, попытавшись выполнить команду вставки в Excel. Скопируйте данные в буфер обмена, воспользуйтесь командой Специальная вставка в Excel, а затем просмотрите форматы, перечисленные в диалоговом окне Специальная вставка.

За неимением времени попробую отрубить этот кусок кода и подождать где вылезет

 

Ответить

KuklP

Дата: Четверг, 05.10.2017, 14:03 |
Сообщение № 10

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Shurakm, еще раз — Вы слышали звон, не зная где он. Параметр format применяется при копировании например, из ворда, Ишака и т.д. Из внешних приложений. При копировании с листа на лист Экса применяют ВСЕ другие параметры. Я Вам в №4 привел справку — какие. Не надо превращать тему в пустопорожний треп, Вам ведь решение надо?


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

I’ve been looking at this for ages now and I know its something simple.

the code below is throwing me an error «Method ‘PasteSpecial’ of object ‘Range’ failed» is the error

With xlWB.Sheets("Lookups")
    'Copy lookups tab to word test tables
    .Cells.Copy
    ThisWorkbook.Sheets("Word_Test_Tables").Cells.PasteSpecial
    Application.CutCopyMode = False
End With

The error occurs on the pastespecial.

Once this error has happened the code will continue to f5 through but nothing will actually happen, I can not select any tabs or workbooks and have to end task the application.

Putting a break point on the error line I can get a range from

?ThisWorkbook.Sheets("Word_Test_Tables").Cells

I have tried activating the sheet, unhiding the sheet. I can confirm xlWB is valid and open, .cells.copy looks to be working as you get the highlighting round the sheet.

Any ideas?

asked May 28, 2015 at 15:23

99moorem's user avatar

I don’t really know why you would copy all the cells rather than just the used range:

    xlWB.Sheets("Lookups").Usedrange.copy _
Destination:=ThisWorkbook.Sheets("Word_Test_Tables").Range("A1")

answered May 28, 2015 at 15:41

Rory's user avatar

RoryRory

32.8k5 gold badges32 silver badges35 bronze badges

8

You need to come out of your ‘with’ to paste the values in the other workbook:

With xlWB.Sheets("Lookups")
'Copy lookups tab to word test tables
.Cells.Copy

End With

ThisWorkbook.Sheets("Word_Test_Tables").Cells.PasteSpecial

answered May 28, 2015 at 15:32

Uberzen1's user avatar

Uberzen1Uberzen1

4156 silver badges18 bronze badges

4

You may have worksheets with different sizes depending on the source workbooks. Try copying a smaller Range.

Besides, you probably want ActiveWorkbook instead of ThisWorkbook.

answered May 28, 2015 at 16:09

sancho.s ReinstateMonicaCellio's user avatar

1

  • Remove From My Forums
  • Question

  • I have a macro which copies and pastes images when a cell value is changed.

    Stepping through the code works fine but running by addressing the cell gives the following error:

    Run-Time error ‘1004’:

    RunPasteSpecial method of Range class failed.

    When I debug it goes to this line:

            ActiveSheet.Shapes("Signature").Copy
            Sheets("Quote").Range("B35").PasteSpecial

    I’ve tried changing Paste to PasteSpecial and copying in different ways but to no avail. 

    Annoyingly the macro runs fine on certain computers but gives the above error on others.

    Could it be a concurrency error or something to do with the clipboard?

    I’ve searched through loads of forums and found nothing so any help would be greatly appreciated.

    Thanks in advance.

    • Moved by

      Monday, January 30, 2012 8:55 AM
      Moving to a more appropriate forum (From:Excel IT Pro Discussions)

Answers

  • I have found the cause of this problem.

    It was caused by the Paste operation being run before the compiler had finished copying the image.

    It was resolved by putting 

    Do Events

    between the Copy and Paste actions.

    • Marked as answer by
      evoandy
      Wednesday, February 6, 2013 3:54 PM

Цитата
kuklp написал:
RoMuLX , это еще модеры Вашего никнейма не видели.

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

Вы свой-то никнейм видели?!) Это ж бессмысленным набором символов))

Цитата
kuklp написал:
И то что Вы вторглись в чужую тему со своим вопросом им тоже вряд ли понравится.

И не вторгся, а продолжил ту же тему. Я наступал на те же грабли, что и описаны выше.
Обсуждения в данной теме уже 22 Мар 2017 15:58:53 было закончено, соответственно мой пост не вносит путаницу.
Если заметили, уже однажды до меня (22 Мар 2017 12:28:10) тема так же поднималась и ничего, никого не заблокировали за «нарушение».

И вы, наверно, плохо сами прочитали правила форума:

Цитата
3. Запрещено:
3.7. Создавать темы с вопросами, ответы на которые даны в Приемах или прошлых темах форума.

4. Не рекомендуется:
4.5. Самовольное модерирование. Т.е. когда некий участник форума, не являющийся модератором данного форума, делает замечания другим участникам.

Не вижу у вас надписи «модератор»- поэтому либо не флудите\оффтопте, либо помогите.

Я нашел

поиском

последнюю открытую и продолжил, т.к. в моем случае есть нюансы.
И я не пишу как халявщик, я полностью все оформил в соответствии с правилами — описал и дал пример, и даже свой код не до конца правильный выложил.
И проблему рваного копирования ячеек мной была решена немного по-другому, но не до конца (только в одну сторону).

Понравилась статья? Поделить с друзьями:
  • Vba excel ошибка знач
  • Valheim вылетает ошибка unity
  • Valeo thermo e320 сброс ошибок
  • Valeo thermo 350 коды ошибок
  • Val1 ошибка валорант