

현재 상황을 간단히 설명을 드리자면
딱히 뭐 코드(?)라고 할 것도 없을 정도로 매우 간단합니다.
하지만 문제는 정상적으로 실행이 되지 않는다는 것이 문제입니다.
현재 작성된 코드는 VBAProject(bbb.xlsx)에 속해 있는(혹은 저장되어 있는) 상태입니다.
그런데 이상한 점이 있습니다.
두 개 의 코드는 각각 다음과 같습니다.
(편의상 1번 코드, 2번 코드라고 하겠습니다.)
1번 코드
Sub 다른워크북에서복사()
Workbooks("aaa.xlsx").Worksheets("Sheet1").Range("A1:E1").Copy
End Sub
2번 코드
Sub 다른워크북에서복사()
Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Copy
End Sub
1번 코드의 경우에는 오류가 발생하지 않는데 2번 코드의 경우 1004 Error 오류 메시지를
출력하면서 실행이 멈춰 버립니다.
1번 코드와 2번 코드에서 다른 부분은
Range("A1:E1") 과 Range(Cells(1, 1), Cells(5, 1)) 밖에 없습니다.
Range("A1:E1")나 Range(Cells(1, 1), Cells(5, 1)) 둘 다 A1셀부터 E1셀까지를
의미하는 것으로 알고 있습니다.
그런데 왜... 어째서 Workbooks("aaa.xlsx").Worksheets("Sheet1") 다음에
.Range("A1:E1").Copy라고 입력하면 실행했을 때 정상 실행이 되고
.Range(Cells(1, 1), Cells(5, 1)).Copy 입력하면 실행했을 때 오류(1004 Error) 메시지가 발생하는 건가요?
이거 왜 이런 것인지 누구 설명해 주실 고수(고수가 아니시라도 잘 아신다면 대환영) 분 어디 없으신가요?
원래 작성하려던 것은
Sub 다른워크북에서복사()For c=1 to 20Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, c), Cells(5, c)).CopyRange(Cells(1,c), Cells(5,c)).PasteSpecialApplication.CutCopyMode = FalseNext cEnd Sub
입니다. 그런데 Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, c), Cells(5, c)).Copy
에서 넘어가질 않으니 원...
<<참고로 VBAProject(bbb.xlsx)가 아닌 VBAProject(aaa.xlsx)에서
Sub 다른워크북에서복사()
Workbooks("aaa.xlsx").Worksheets("Sheet1").Range("A1:E1").Copy
End Sub
작성하든
Sub 다른워크북에서복사()
Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Copy
End Sub
둘 다 오류도 나타나지 않고 문제 없이 잘 실행이 되었다는 점을 알려 드립니다.>>

ㅁ 원천적으로 다른 부분
Range("A1:E1")는 Range(Cells(1,1), Cells(1,5))와 같습니다.
Cells는 행,열 순으로 합니다. 우리가 수학할 때 x축 y축 개념이라면 x, y가 아니라 y, x 입니다.
ㅁ 상황에 따라 다른 부분
코딩 습관에 따른 오류가능성이 높은 문제입니다.
Worksheets("AA").Range("A1:E1") -> 이건 객체가 명확해서 문제가 없습니다.
Worksheets("AA").Rnage(Cells(1,1), Cells(5,1)) -> 이건 상황에 따라 다릅니다.
명확히 표시해 보면 Worksheets("AA").Range(ActiveSheet.Cells(1,1), ActiveSheet.Cells(5,1))에서 ActiveSheet를 생략한 것입니다.
Range나 Cells을 단독으로 사용하면 앞에 ActiveSheet가 생략된 것으로 보셔야 하며,
이로 인한 문제를 회피하기 위해서 가능하면 아래와 같이 With 문안에서 쩜(.)을 사용하는 것이 좋습니다.
With Worksheets("AA") .Range(.Cells(1,1), .Cells(1,5)).Copy End With착각했었나 봅니다. (근데 뭐 이건 별로 중요한 것은 아니지만...
알려주셔서 감사합니다.)
진짜 중요한 부분은 이 부분인데...
Worksheets("AA").Rnage(Cells(1,1), Cells(5,1)) 이건 상황에 따라 다르다.
그렇군요. 같은 엑셀 파일 문서 안에서 여러 셀을 범위로 지정해서 복사할 때는
Sub 다른워크북에서복사()
Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Copy
End Sub
만 작성해도 프로그램 실행에 문제 없길래 파일이 서로 다른 엑셀 문서의 경우에도 문제 없을 줄
알았늗데 파일이 다른 경우에는 위와 같이 "ActiveSheet."을 빼 놓고 작성하면 복사와 붙여넣기
경우에는 문제가 되는가 보군요. 그냥 간단히 복사하고 여러 곳에 붙여 넣기 할 것이라서
With 같은 것 안 쓰고 작성하려 했더니.. 결국엔 저게 (문제 발생 요인을 차단하는) 정석이었네요.
자세히 설명해 주시고 예시까지 제공해 주셔서 감사합니다. 덕분에 많은 도움이 되었습니다.
따라서 Range("A1:E1")은 Range(Cells(1,1), Cells(1,5))로 바꿔야 합니다.
앞에 원조백수님이 알려주셨습니다.
근데 문제는 그게 중요한 것이 아닙니다.
(그 부분은 바꾸면 됩니다.) 진짜 문제는 그게 아니고
Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Copy이든
Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 5)).Copy이든
그 코드 부분에서 1004 Error 오류가 발생한다는 그 점이 진짜 문제인 것이죠.
(앞에 부분은 Cells(5,1)을 Cells(1,5)바꿔 주면 되니 별 문제가...)
bbb.xlsx 문서 안의 비주얼코드에서 해당 소스를 작성해서 실행 시켰을 경우에...
aaa.xlsx에서는 문제 없이 그 부분이 잘 실행됩니다.
1번의 경우 Workbooks("aaa.xlsx").Worksheets("Sheet1").Range("A1:E1").Copy 하든지 2번의 경우 Workbooks("aaa.xlsx").Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Copy
관계 없이 잘 실행이 됩니다.
어찌되었든 그래도 도움을 주시려고 했던 점에 감사의 말씀 전합니다.