вставить специальную в VBA - PullRequest
1 голос
/ 14 июня 2011

я пытаюсь использовать pastespecial в vba..i в основном нужно вставить значения (а не формулы, поскольку формула пересчитывается при вставке на новый лист из-за изменения значений ячеек на этом листе) на другой лист ... но я получаю сообщение об ошибке 1004, в котором говорится: "определена ошибка приложения или объекта" .. вот код ... пожалуйста, помогите somebdy ...

Sub Macro1try()

Dim i As Integer

Dim j As Integer

For i = 1 To 2

Worksheets("Volatility").Cells(1, "B").Value = Worksheets("Volatility").Cells(i, "S").Value

Call mdlMain.ExtractData

 Range("A11:D2330").Select

    Selection.Copy

    Sheets.Add After:=Sheets(Sheets.Count)

    ActiveSheet.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False


  ActiveWorkbook.Sheets("Volatility").Activate


    Next i
End Sub

Ответы [ 3 ]

4 голосов
/ 14 июня 2011

Это я усвоил трудным путем: Избегайте копирования / вставки, если это возможно! Копирование и вставка используют буфер обмена.Другие программы могут выполнять чтение / запись в буфер обмена во время работы вашего кода, что приведет к непредсказуемым непредсказуемым результатам на обоих концах.

В вашем конкретном случае копирование и вставка совершенно не нужны.Просто используйте =.

For i = 1 To 2

    '// Your stuff, which I won't touch:
    Worksheets("Volatility").Cells(1, "B").Value _
         = Worksheets("Volatility").Cells(i, "S").Value
    Call mdlMain.ExtractData
    Sheets.Add After:=Sheets(Sheets.Count)

    '// The following single statement replaces everything else:
    Sheets(Sheets.Count).Range("A11:D2330").Value _
        = Sheets("Volatility").Range("A11:D2330").Value
    '// Voilà. No copy, no paste, no trouble. 

    '// If you need the number format as well, then:
    Sheets(Sheets.Count).Range("A11:D2330").NumberFormat_
        = Sheets("Volatility").Range("A11:D2330").NumberFormat    
Next i
1 голос
/ 14 июня 2011

Вам нужно указать, куда вы кладете это на лист

Sub Macro1try()

Dim i As Integer
Dim j As Integer

For i = 1 To 2

    Worksheets("Volatility").Cells(1, "B").Value = Worksheets("Volatility").Cells(i, "S").Value

    Call mdlMain.ExtractData

    Sheets.Add After:=Sheets(Sheets.Count)

    Worksheets("Volatility").Range("A11:D2330").Copy
    Sheets(Sheets.Count).Range("A11:D2330").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False

Next i
End Sub
0 голосов
/ 14 июня 2011

Добавить ".Range (" A1 ")."Между 'ActiveSheet' и 'PasteSpecial' Измените A1 на место, куда вы хотите вставить.

...