运行“粘贴”时,出现VBA运行时错误438

时间:2018-12-21 18:53:08

标签: vba excel-vba paste

我对上述内容有疑问:我正在使用提供的答案,但仍然遇到对象错误。你能看到我所缺少的吗?我在“ Cash_Sheet.Range(” C8“)。PasteSpecial xlPasteValues”处犯了错误

`Sub Refresh_Cash()      
Dim Morning_Export As Workbook     
Dim Cash_Sheet As Worksheet  

'Open MorningExport cash workbook     
Set Morning_Export = Workbooks.Open(Range("varMornExpPath"))  

'Copy cash from Morning_Export_Settlement_Cas tab: 
Morning_Export.Sheets("Morning_Export_Settlement Cas").Range("A1:AR5000").Copy  

'Set the sheet in this file to paste to:
Set Cash_Sheet = ThisWorkbook.Worksheets("Cash")  
'Clear prior data from EOD_Check
 Cash_Sheet.Range("rngRefreshPFMExp").ClearContents  

'EVERYTHING WORKS UP UNTIL THIS POINT BUT THEN FAILS HERE
 Cash_Sheet.Range("C8").PasteSpecial xlPasteValues  

'Close MorningExport book:     
Morning_Export.Close  

End Sub

2 个答案:

答案 0 :(得分:1)

Sub Refresh_Cash()

Dim wb As Workbook: Set wb = Workbooks.Open(Range("varMornExpPath"))
Dim cs As Worksheet: Set cs = ThisWorkbook.Sheets("Cash")

cs.Range("rngRefreshPFMExp").ClearContents
wb.Sheets("Morning_Export_Settlement Cas").Range("A1:AR5000").Copy
cs.Range("C8").PasteSpecial xlPasteValues

wb.Close

End Sub

答案 1 :(得分:0)

您可以直接将一个范围内的值写入另一个范围,而不必使用copy \ paste。这在大型数据集上的运行速度更快,因为它不必复制两次。它还可以使代码更简洁。

Public Sub Refresh_Cash()
    Dim Morning_Export As Workbook
    Dim Cash_Sheet As Worksheet

    'Open MorningExport cash workbook
    Set Morning_Export = Workbooks.Open(ActiveSheet.Range("varMornExpPath"))

    'Set the sheet in this file to paste to:
    Set Cash_Sheet = ThisWorkbook.Worksheets("Cash")

    ' Set the values directly
    Cash_Sheet.Range("C8") = Morning_Export.Sheets("Morning_Export_Settlement Cas").Range("A1:AR5000")

    'Close MorningExport book:
    Morning_Export.Close
End Sub

请参阅:Copy/PasteSpecial vs Range.Value = Range.Value