Activesheet paste ошибка

Copy pasting 1 line of text from word to excel using VBA.

When the code reaches the below line I am getting the below error.

ActiveSheet.Paste

Run Time Error ‘1004’: Paste Method Of worksheet Class Failed error

But if I click Debug button and press F8 then it’s pasting the data in excel without any error.

This error occurs each time the loop goes on and pressing debug and F8 pasting the data nicely.

I did several testing and unable to find the root cause of this issue.

Also used DoEvents before pasting the data code but nothing worked.

Any suggestions?

EDIT:-

I am posting the code since both of you are saying the same. Here is the code for your review.

Sub FindAndReplace()
    Dim vFR As Variant, r As Range, i As Long, rSource As Range
    Dim sCurrRep() As String, sGlobalRep As Variant, y As Long, x As Long

    Dim NumCharsBefore As Long, NumCharsAfter As Long
    Dim StrFind As String, StrReplace As String, CountNoOfReplaces As Variant

    '------------------------------------------------
    Dim oWord As Object
    Const wdReplaceAll = 2

    Set oWord = CreateObject("Word.Application")
    '------------------------------------------------

    Application.ScreenUpdating = False

    vFR = ThisWorkbook.Sheets("Sheet1").Range("A1").CurrentRegion.Value

    On Error Resume Next
        Set rSource = Cells.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0

    If Not rSource Is Nothing Then
        For Each r In rSource.Cells
            For i = 2 To UBound(vFR)
                If Trim(vFR(i, 1)) <> "" Then
                    With oWord
                        .Documents.Add
                            DoEvents
                            r.Copy
                            .ActiveDocument.Content.Paste

                            NumCharsBefore = .ActiveDocument.Characters.Count

                            With .ActiveDocument.Content.Find
                                .ClearFormatting
                                .Font.Bold = False
                                .Replacement.ClearFormatting
                                .Execute FindText:=vFR(i, 1), ReplaceWith:=vFR(i, 2), Format:=True, Replace:=wdReplaceAll
                            End With

                            .Selection.Paragraphs(1).Range.Select
                            .Selection.Copy
                            r.Select
                            ActiveSheet.Paste'Error occurs in this line pressing debug and F8 is pasting the data

                            StrFind = vFR(i, 1): StrReplace = vFR(i, 2)
                            NumCharsAfter = .ActiveDocument.Characters.Count
                            CountNoOfReplaces = (NumCharsBefore - NumCharsAfter) / (Len(StrFind) - Len(StrReplace))
                            .ActiveDocument.UndoClear
                        .ActiveDocument.Close SaveChanges:=False

                        If CountNoOfReplaces Then
                            x = x + 1
                            ReDim Preserve sCurrRep(1 To 3, 1 To x)
                            sCurrRep(1, x) = vFR(i, 1)
                            sCurrRep(2, x) = vFR(i, 2)
                            sCurrRep(3, x) = CountNoOfReplaces
                        End If
                        CountNoOfReplaces = 0
                    End With
                End If
            Next i
        Next r
    End If
   oWord.Quit
'Some more gode goes here... which is not needed since error occurs in the above loop
End Sub

If you want to know why I have chosen word for replacement then please go through the below link.
http://www.excelforum.com/excel-programming-vba-macros/1128898-vba-characters-function-fails-when-the-cell-content-exceeds-261-characters.html

Also used the code from the below link to get the number of replacements count.

http://word.mvps.org/faqs/macrosvba/GetNoOfReplacements.htm

 

extrafant

Пользователь

Сообщений: 266
Регистрация: 22.07.2017

Собственно, пока код не модернизировал все работало. Теперь сделал корректный выбор только 1 файла, но не вставляются данные.

Вроде все делаю самым простым способом. Просто копирую из одного листа и вставляю в другой. Почему же возникает такая ошибка?

Запустить:
Запустить файл Приготовить таблицу КДР. Нажать кнопку получить данные.
Выбрать файл Отчет Список обучающихся очно в X параллели(входящие данные)

И будет эта самая ошибка

 

Sanja

Пользователь

Сообщений: 14849
Регистрация: 10.01.2013

#2

11.07.2019 12:22:36

Цитата
extrafant написал: И будет эта самая ошибка

Ошибка не воспроизвелась.
На какой строке какого макроса ошибка?

Согласие есть продукт при полном непротивлении сторон.

 

extrafant

Пользователь

Сообщений: 266
Регистрация: 22.07.2017

Private Sub pastedata()
   ThisWorkbook.Activate
   shData.Select
   ActiveSheet.Cells.Clear
   Range(«A1»).Select
   ActiveSheet.Paste
End Sub

Во время  ActiveSheet.Paste

Это самое paste не происходит

 

RAN

Пользователь

Сообщений: 7139
Регистрация: 21.12.2012

#4

11.07.2019 12:43:39

Замените ВЕСЬ ваш код. Ему припарками не помочь.
Будет и открываться, как надо, и вставляться, и заменяться.

Код
Private Sub openfile()
    Dim filename$, cl As Range
    With Application.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = ThisWorkbook.Path & ""
        .AllowMultiSelect = True
        .Title = "Please select the folder containing the files you want to Import"

        If .Show = -1 Then
            filename = .SelectedItems(1)
        End If
    End With
    If filename = Empty Then End
    Application.ScreenUpdating = False
    With Workbooks.Open(filename)
        shData.UsedRange.Clear
        .Sheets(1).Range("A8").CurrentRegion.Copy shData.Cells(1)
        .Close savechanges:=False
    End With
    On Error Resume Next
    shData.Cells.WrapText = False
    shData.Columns(3).AutoFit
    For Each cl In Intersect(shData.UsedRange, shData.Columns(3))
        cl.Value = Left(cl.Value, InStrRev(cl.Value, " ") - 1)
    Next
    Application.ScreenUpdating = True
End Sub 
 

extrafant

Пользователь

Сообщений: 266
Регистрация: 22.07.2017

Ошибка сохранилась. Хотя я заменил содержимое макроса Private Sub openfile()

 

extrafant

Пользователь

Сообщений: 266
Регистрация: 22.07.2017

#6

11.07.2019 12:47:00

Цитата
Sanja написал:
Ошибка не воспроизвелась.На какой строке какого макроса ошибка?

Странно, конечно, что у Вас ошибка не воспроизводится

 

RAN

Пользователь

Сообщений: 7139
Регистрация: 21.12.2012

#7

11.07.2019 12:55:48

По ошибке. Строка

Код
 ActiveSheet.Cells.Clear

сбрасывает буфер, и вставлять нечего.

 

extrafant

Пользователь

Сообщений: 266
Регистрация: 22.07.2017

#8

11.07.2019 12:56:53

Цитата
RAN написал:
По ошибке. Строка   Код ? 1ActiveSheet.Cells.Clearсбрасывает буфер, и вставлять нечего.

Закомментил. Ошибка сохранилась.

Изменено: extrafant11.07.2019 12:58:16

 

RAN

Пользователь

Сообщений: 7139
Регистрация: 21.12.2012

#9

11.07.2019 13:00:32

Цитата
extrafant написал:
Хотя я заменил содержимое макроса Private Sub openfile()

Если это реакция на мой ответ, то весь код, и текст одной процедуры — вещи разные.
Запускайте сразу openfile.

 

extrafant

Пользователь

Сообщений: 266
Регистрация: 22.07.2017

#10

11.07.2019 13:06:16

Цитата
RAN написал:
Если это реакция на мой ответ, то весь код, и текст одной процедуры — вещи разные.Запускайте сразу openfile.

Я разобрался. Ошибки нет.

Когда я скопировал Ваш код, то я забыл добавить вот этот участок кода:

Код
If filename = Empty Then End
    Workbooks.Open (filename)
    Range("A8").Select
    ActiveCell.CurrentRegion.Select
    ActiveCell.CurrentRegion.Copy
    
    Application.DisplayAlerts = False
    
    Workbooks(filename).Close savechanges:=False
    
    Application.DisplayAlerts = True

Соответственно ничего не копировалось и вставиться уже ничего не могло.

СПАСИБО!

 

RAN

Пользователь

Сообщений: 7139
Регистрация: 21.12.2012

#11

11.07.2019 13:21:48

Цитата
extrafant написал:
то я забыл добавить вот этот участок кода:

Что значит «забыл»? И зачем в мой код вообще что-либо добавлять? Тем паче эдакое?

 

extrafant

Пользователь

Сообщений: 266
Регистрация: 22.07.2017

#12

11.07.2019 13:24:45

Цитата
RAN написал:
Замените ВЕСЬ ваш код. Ему припарками не помочь.Будет и открываться, как надо, и вставляться, и заменяться.Код ? 1234567891011121314151617181920212223242526Private Sub openfile()    Dim filename$, cl As Range    With Application.FileDialog(msoFileDialogFilePicker)        .InitialFileName = ThisWorkbook.Path & «»        .AllowMultiSelect = True        .Title = «Please select the folder containing the files you want to Import»         If .Show = -1 Then            filename = .SelectedItems(1)        End If    End With    If filename = Empty Then End    Application.ScreenUpdating = False    With Workbooks.Open(filename)        shData.UsedRange.Clear        .Sheets(1).Range(«A8″).CurrentRegion.Copy shData.Cells(1)        .Close savechanges:=False    End With    On Error Resume Next    shData.Cells.WrapText = False    shData.Columns(3).AutoFit    For Each cl In Intersect(shData.UsedRange, shData.Columns(3))        cl.Value = Left(cl.Value, InStrRev(cl.Value, » «) — 1)    Next    Application.ScreenUpdating = TrueEnd Sub

Данный участок работал.
Но не работал для моих нужд.
Как только я добавил:

Код
If filename = Empty Then End
    Workbooks.Open (filename)
    Range("A8").Select
    ActiveCell.CurrentRegion.Select
    ActiveCell.CurrentRegion.Copy
    Application.DisplayAlerts = False
    Workbooks(filename).Close savechanges:=False
    Application.DisplayAlerts = True

сразу ошибка, которая не вставляла данные ушла. И все заработало

Понятно, что вставить оно не могло т.к. не было  ActiveCell.CurrentRegion.Copy

crou

0 / 0 / 0

Регистрация: 20.11.2012

Сообщений: 5

1

20.11.2012, 17:58. Показов 17084. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день. сгенерировал код при помощи записи макроса:

Visual Basic
1
2
3
4
5
6
7
8
    Range("Таблица_Запрос_ec_sql0101[#All]").Select
    Selection.Copy
    Application.CutCopyMode = False
    Sheets("Лист2").Select
    Range("A3").Select
    ActiveSheet.Paste
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3, 8, 9), _
    Replace:=True, PageBreaks:=False, SummaryBelowData:=True

он должен с первого активного листа копировать диапазон, вставлять его на второй лист в указанное место и делать промежуточные суммы. При пошаговом выполнении под отладкой, все работает как положено, при попытке прикрутить выполнение этого макроса на кнопку или горячую клавишу или просто запуск макроса, на строке ActiveSheet.Paste выдает ошибку что метод Paste завершен неверно. Помогите.



0



Скрипт

5471 / 1149 / 50

Регистрация: 15.09.2012

Сообщений: 3,515

20.11.2012, 18:05

2

Это отключает копирование:

Visual Basic
1
Application.CutCopyMode = False



1



0 / 0 / 0

Регистрация: 20.11.2012

Сообщений: 5

20.11.2012, 18:21

 [ТС]

3

закоментировал, данные скопировались (включая имя диапазона данных и шапку из БД с названиями колонок), но теперь неработает Selection.Subtotal, т.е. не строится промежуточный итог в таблице, так же на панели инструментов неактивна данная функция. Подозреваю что это связано с тем что данные подтягиваются из БД.



0



5471 / 1149 / 50

Регистрация: 15.09.2012

Сообщений: 3,515

20.11.2012, 18:23

4

crou, новую тему тогда создавайте, т.к. у вас теперь другая задача, которая никак не связана с данной темой.



2



0 / 0 / 0

Регистрация: 20.11.2012

Сообщений: 5

20.11.2012, 21:38

 [ТС]

5

Цитата
Сообщение от Скрипт
Посмотреть сообщение

crou, новую тему тогда создавайте, т.к. у вас теперь другая задача, которая никак не связана с данной темой.

создал, только модераторы вместо удаления/закрытия этой темы потерли, новую. Наверное здесь так принято, ок. Продолжаем разговор. Selection.Subtotal выдает «Метод завершен неверно», подозреваю что дело в привязке к БД. Как можно это обойти?



0



Скрипт

5471 / 1149 / 50

Регистрация: 15.09.2012

Сообщений: 3,515

20.11.2012, 21:41

6

crou, сколько столбцов вы копируете?

Ваш код:

Visual Basic
1
2
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3, 8, 9), _
    Replace:=True, PageBreaks:=False, SummaryBelowData:=True

Девять столбцов есть в копируемом диапазоне?



0



0 / 0 / 0

Регистрация: 20.11.2012

Сообщений: 5

21.11.2012, 01:19

 [ТС]

7

Конечно есть, как я уже сказал в самом первом посте, приведенный там код под отладкой пошагово работал на все 100% (т.е. он копировал, вставлял и делал промежуточные суммы в столбцах 3, 8, 9 с группировкой по первому столбцу), но только пошагово, иначе выводил ошибку. После удаления строки Application.CutCopyMode = False, блок данных копируется всегда, но перестали строится промежуточные суммы как под отладкой так и без нее.



0



Скрипт

5471 / 1149 / 50

Регистрация: 15.09.2012

Сообщений: 3,515

21.11.2012, 07:29

8

crou,

  1. у вас просто данные вставляются на Лист2 или формулы?
  2. вставленные данные содержат девять столбцов?
  3. попробуйте вместо своего кода использовать, вот этот (в строках 7 и 8 укажите порядковые номера листов, с которыми должен работать код, в строке 11 укажите имя копируемого диапазона):
    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    Sub Procedure_1()
     
        Dim shSheet_1 As Excel.Worksheet
        Dim shSheet_2 As Excel.Worksheet
        
        'Для обращения к листам будем использовать переменные.
        Set shSheet_1 = Worksheets(1)
        Set shSheet_2 = Worksheets(2)
     
        'Вставляем данные.
        shSheet_1.Range("A1:I10").Copy Destination:=shSheet_2.Range("A3")
            
        'Вставляем промежуточные данные.
        shSheet_2.Range("A3").Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3, 8, 9), _
            Replace:=True, PageBreaks:=False, SummaryBelowData:=True
     
    End Sub



0



0 / 0 / 0

Регистрация: 20.11.2012

Сообщений: 5

22.11.2012, 12:26

 [ТС]

9

1. просто данные (но они в свою очередь в exсel тянутся из sql сервера)
2. данных там 12 колонок
3. попробовал, та же петрушка, данные скопировались, на 14 строчке вывалило ошибку

я очень сильно подозреваю что это все связано с тем что данные тянутся из sql, как можно програмно сделать отключение таблицы от сервера ?



0



OlegSmirnov Дата: Вторник, 27.02.2018, 05:52 |
Сообщение № 1

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

Ранг: Участник

Сообщений: 97


Репутация:

0

±

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


Excel 2013

Здравствуйте.
Есть такой вопрос.

Макрос при вставке картинок на лист — выдает ошибку
«Run-time error ‘1004’ Метод Paste из класса Worksheet завершен неверно.»
И выделяет в коде слово «ActiveSheet.Paste».

Как это исправить ?

Код выглядит так:
[vba]

Код

Sub ВыводФотоФигур()

Dim itx As Long
    Application.ScreenUpdating = False
    For itx = ActiveSheet.Shapes.Count To 1 Step -1
        If Not Intersect(ActiveSheet.Shapes(itx).TopLeftCell, Columns(«I:BJF»)) Is Nothing Then
            ActiveSheet.Shapes(itx).Delete
        End If
    Next itx
    ActiveSheet.Range(«I1:BJF50»).ClearContents

              Dim Ws As Worksheet, i%, FR As Range, adr$, f$, a$, ms, str&, col&
    str = 2: col = 9
    For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row
        f = Cells(i, 3).Value
        For Each Ws In Sheets
            If Ws.Name <> «Поиск» And Ws.Name <> «Лист4» Then
                Set FR = Ws.Cells.Find(f)
                If Not FR Is Nothing Then
                    Cells(str, col) = Ws.Name & «!» & FR.Address
                    Cells(str + 1, col) = FR
                    Макрос1 Cells(str, col).Value, col
                    col = col + 4
                    ‘adr = adr & » » & Ws.Name & «!» & FR.Address
                    ‘—цикл по следующим найденным ячейкам
                    a = FR.Address    ‘—запоминаем адрес первой найденной ячейки
                    Do
                        Set FR = Ws.Cells.FindNext(FR)
                        If FR.Address = a Then Exit Do
                        col = col + 4
                        Cells(str, col) = Ws.Name & «!» & FR.Address
                        Cells(str + 1, col) = FR
                        Макрос1 Cells(str, col).Value, col
                        ‘adr = adr & » » & Ws.Name & «!» & FR.Address
                    Loop
                    ‘————
                End If
                ‘                If adr <> «» Then
                ‘                    ms = Split(Mid(adr, 2, 1000))
                ‘                    Cells(i, 5).Resize(, UBound(ms) + 1) = ms
                ‘                End If
            End If
        Next
        ‘Cells(i, 5) = adr ‘если в одну
        ‘если один адрес — одна ячейка
        ‘ms = Split(Mid(adr, 2, 1000))
        ‘Cells(i, 5).Resize(, UBound(ms) + 1) = ms
        ‘————————-
        ‘adr = «»
    Next

        Application.ScreenUpdating = True
    Range(«A1»).Select
End Sub

Sub Макрос1(ByVal adr As String, ByVal col As Long)
    ‘adr = Лист5.[i2]
    If adr = «» Then Exit Sub
    shi = Split(adr, «!»)(0)
    Mn = 0
    Set cl = Range(adr) ‘[M16]
    clleft = cl.Left: cltop = cl.Top

        For Each Sh In Sheets(shi).Shapes
        shLeft = Sh.Left
        shtop = Sh.Top
        d = (Abs(clleft — shLeft) ^ 2 + Abs(cltop — shtop) ^ 2) ^ 0.5
        If Mn = 0 Then
        Mn = d: f = Sh.Name
        ElseIf Mn > d Then Mn = d: f = Sh.Name
        End If
    Next

        Лист22.Cells(1, col) = f

        Sheets(shi).Shapes(f).Copy  ‘Select
    Лист22.Cells(5, col).Select
    ActiveSheet.Paste

    End Sub

Sub ОчисткаДиапазона()
Dim itx As Long
    Application.ScreenUpdating = False
    For itx = ActiveSheet.Shapes.Count To 1 Step -1
        If Not Intersect(ActiveSheet.Shapes(itx).TopLeftCell, Columns(«I:BJF»)) Is Nothing Then
            ActiveSheet.Shapes(itx).Delete
        End If
    Next itx
    ActiveSheet.Range(«I1:BJF50»).ClearContents
    End Sub

[/vba]

Сообщение отредактировал OlegSmirnovВторник, 27.02.2018, 05:53

 

  • #2

I think you need to specify a Range to paste to e.g.:

Code:

ActiveSheet.Range("A1").Paste

Dom

Last edited: Apr 27, 2009

RoryA

RoryA

MrExcel MVP, Moderator


  • #3

Where exactly is this code located? In a ThisWorkbook module or a worksheet module or a normal module?

  • #4

DOMSKI — The range didn’t make any difference, it still fell over at the same point, I had selected the range earlier in the code so it was already in the right place…..

RORYA — The code is in a module in the workbook…

Thanks guys…

Legacy 68668

Guest


  • #5

You can not use Paste method to a range

ActiveSheet.Range(«A1»).PasteSpecial

  • #6

Is the module named «Module1» or something else? Please could you indicate exactly which line the error occurs at

  • #7

SEIYA — Tried your code line, it still failed at that same point, i.e. when pasting….

RICHARDSCHOLLAR — It is «Module3» and the macro is called «CollateProgrammeReport()»

It fails at the following line…

Code:

Application.Run "'Milestones_matrix.xls'!ResetFilters"
    Range("A11").Select
    Sheets("All Milestones").Select
    Selection.AutoFilter Field:=18, Criteria1:="=1", Operator:=xlAnd
    LR = Cells(65536, 3).End(xlUp).Row
    If LR > 2 Then
    Range("B3:M" & LR).SpecialCells(xlCellTypeVisible).Copy
    Windows("Programme report template.xls").Activate
    [COLOR=red][B][U]ActiveSheet.Paste
[/U][/B][/COLOR]    Application.CutCopyMode = False
    End If
    ActiveSheet.Paste
    Application.CutCopyMode = False
    End If

  • #8

Is there an actual Worksheet active when the Paste code is activated? It couldn’t be a ChartSheet could it? You could avoid such a possibility by referencing the specific sheet you want to target eg:

Rich (BB code):

Sheets("YourSheetNameHere").Paste

Replace the bit in red with your sheet name.

  • #9

The line..

Code:

Windows("Programme report template.xls").Activate

..is just before the paste code so I assume this is enough to activate the file.

None of the options listed have worked, it just doesn’t seem to like the paste task at that point….as I mentioned, I ahve another piece of code which works and does the same thing in another file!!

  • #10

What’s the activecell in the destination worksheet when you paste the data? Have you tried to specifically target the cell in which to paste? Do you have any merged cells in the detsination worksheet?

Понравилась статья? Поделить с друзьями:
  • Addictive keys ошибка
  • Addhook dll ошибка при загрузке внешней компоненты
  • Add windowscapability сбой add windowscapability код ошибки 0x8024500c
  • Add windowscapability сбой add windowscapability код ошибки 0x80244022
  • Add windowscapability сбой add windowscapability код ошибки 0x80240438