Ошибка выполнения 438 Объект не поддерживает это свойство или метод при использовании .PasteSpecial - PullRequest
0 голосов
/ 22 декабря 2018

Я использую приведенный ниже скрипт VBA для копирования ячеек.Он вставляет значения во все ячейки (от A до J), но выдает ошибку времени выполнения 438 при вставке значения в K .Я не уверен, почему происходит сбой в последней строке, когда он работает для предыдущих строк.

Sub Programs()
    Dim sh As Worksheet, N As Long
    Dim i As Long, M As Long
    N = Sheets.Count - 4
    M = 2
    For i = 6 To N
        'copy Form number + Edition date
        Sheets(i).Range("$D$4").Copy
        Sheets("Programs1").Range("A" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("A" & M).PasteSpecial (xlFormats)

        'copy Program
        Sheets(i).Range("$C$180").Copy
        Sheets("Programs1").Range("B" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("B" & M).PasteSpecial (xlFormats)
        'copy ProgramStatus
        Sheets(i).Range("$E$180").Copy
        Sheets("Programs1").Range("C" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("C" & M).PasteSpecial (xlFormats)

        'copy Program
        Sheets(i).Range("$C$181").Copy
        Sheets("Programs1").Range("D" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("D" & M).PasteSpecial (xlFormats)
        'copy ProgramStatus
        Sheets(i).Range("$E$181").Copy
        Sheets("Programs1").Range("E" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("E" & M).PasteSpecial (xlFormats)

        'copy Program
        Sheets(i).Range("$C$182").Copy
        Sheets("Programs1").Range("F" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("F" & M).PasteSpecial (xlFormats)
        'copy ProgramStatus
        Sheets(i).Range("$E$182").Copy
        Sheets("Programs1").Range("G" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("G" & M).PasteSpecial (xlFormats)

        'copy Program
        Sheets(i).Range("$C$183").Copy
        Sheets("Programs1").Range("H" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("H" & M).PasteSpecial (xlFormats)
        'copy ProgramStatus
        Sheets(i).Range("$E$183").Copy
        Sheets("Programs1").Range("I" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("I" & M).PasteSpecial (xlFormats)

        'copy Program
        Sheets(i).Range("$C$184").Copy
        Sheets("Programs1").Range("J" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("J" & M).PasteSpecial (xlFormats)
        'copy ProgramStatus
        Sheets(i).Range("$E$184").Copy
        Sheets("Programs1").Range("K" & M).PasteSpecial (xlValues)
        Sheets("Programs1").Range("K" & M).PasteSpecial (xlFormats)
    M = M + 1
Next i

End Sub

1 Ответ

0 голосов
/ 22 декабря 2018

Я тоже не уверен, почему вы получаете сообщение об ошибке, но вы, безусловно, можете сократить код и, возможно, изолировать причину возникновения ошибки.Если у вас есть избыточный код, который вы делаете, разделение этого раздела на отдельный метод «функционально изолирует» эту логику.Это важно, потому что если у вас есть ошибка, вы можете исправить ее, изменив логику только в одном месте.В противном случае вам придется изменить все сгенерированные строки копирования-вставки, чтобы создать приведенный выше пример.Итак, процедура, подобная этой:

Private Sub CopyMe(ByVal sheetIndex As Long, _
                   ByVal from As String, _
                   ByVal to As String)
    Sheets(sheetIndex).Range(from).Copy
    With Sheets("Programs1").Range(to)
        .PasteSpecial Paste:=xlPasteValues 
        .PasteSpecial Paste:=xlPasteFormats
    End With
End Sub

Итак, теперь ваша основная логика будет выглядеть следующим образом:

Sub Programs()
    Dim sh As Worksheet, N As Long
    Dim i As Long, M As Long
    N = Sheets.Count - 4
    M = 2
    For i = 6 To N
        CopyMe i, "D4", "A2"      'copy Form number + Edition date
        CopyMe i, "C180", "B2"    'copy Program
        CopyMe i, "E180", "C2"    'copy ProgramStatus
        ' ...
    Next i
End Sub

Так что, если, когда вы структурируете свой код таким образом, все CopyMeстроки работают за исключением столбца K, тогда вы поймете, что у вас есть проблема со столбцом, а не с теми же копиями и вставками.(Но я думаю, что это сработает ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...