2013-10-16 2 views
1

닫힌 Excel 파일의 데이터를 현재 열려있는 데이터로 복사하는 간단한 매크로를 만들려고합니다. 지금까지 나는이.PasteSpecial을 사용하여 런타임 오류 '438'

Sub CopyData() 

    Dim path As String 
    path = "C:\Users\sam\Coding\bk.xlsx" 

    Dim currentWb As Workbook 
    Set currentWb = ThisWorkbook 

    Dim openWb As Workbook 
    Set openWb = Workbooks.Open(path) 

    Dim openWs As Worksheet 
    Set openWs = openWb.Sheets("Sheet1") 

    currentWb.Activate 
    openWb.Activate 

    openWs.Range("A1:C2").Copy 
    currentWb.Range("A1").PasteSpecial 

     openWb.Close (False) 
End Sub 

을 만든하지만 런타임 오류 438를 얻을 수 및 디버그에이 행 "currentWb.Range ("A1 "). PasteSpecial"을 강조한다. 나는 온 집안에서 대답을 찾지 만 나는 성공하지 못했다. 내 질문은 내가 무엇을 놓치고 있는가?

미리 감사드립니다.

답변

1

문제는

currentWb.Range("A1").PasteSpecial 

그것은

currentWb.Sheets("SomeSheet").Range("A1").PasteSpecial xlPasteAll 

당신이하려고하는 무엇 이건 xlPasteAll를 교체해야합니다.

Range 객체는 Workbook의 일부가 아니라 Worksheet

의 또한 당신은 .Activate를 사용할 필요가 없습니다. 당신 코드는 다음과 같이 쓸 수 있습니다

Sub CopyData() 
    Dim path As String 
    Dim currentWb As Workbook, openWb As Workbook 
    Dim currentWs As Worksheet, openWs As Worksheet 

    path = "C:\Users\sam\Coding\bk.xlsx" 

    Set currentWb = ThisWorkbook 
    '~~> Change this applicable 
    Set currentWs = currentWb.Sheets("Sheet1") 

    Set openWb = Workbooks.Open(path) 
    Set openWs = openWb.Sheets("Sheet1") 

    openWs.Range("A1:C2").Copy 
    currentWs.Range("A1").PasteSpecial xlPasteValues 

    openWb.Close (False) 
End Sub 
+0

위의 내용은 완벽하게 작동합니다. 그리고 무엇보다도 내 원래 코드가 작동하지 않는 이유를 설명해 주셔서 감사합니다. 그것은 Range가 작동하는 방법에 대한 명확한 이해를주었습니다. 나는 그것을 고맙게 생각한다. – sammojohn

관련 문제