글목록

2022년 3월 20일

도형 변환하기 - 3. 도형 복제하기(Duplicate)

일반적으로는 도형을 복사하기 위한 방법으로 Copy, Paste를 사용하면 될 것 같습니다만, 매크로 내에 Copy, Paste를 사용하게 되면 Copy 후 일정 시간을 유지하지 않으면 Paste 명령에 오류가 발생합니다. 아마 도형의 모든 속성을 로드하는 시간이 필요한 것이 아닐까 추측됩니다. 이런 경우, 일정한 시간 동안 다음 작업이 진행되지 않도록 딜레이를 추가할 수는 있습니다만, 그만큼 실행시간이 길어지게 됩니다.

복사, 붙여넣기 사이에 별다른 작업 없이 단순히 도형을 복제하기를 원한다면, Copy, Paste 대신 Duplicate를 이용할 수 있습니다.

아래에 도형을 복제해서 원하는 위치에 넣는 함수를 생성해두었습니다.

앞으로 도형을 가지고 여러가지 작업을 하다보면, 원본은 유지한 상태에서 도형을 복제하여 어떤 작업을 마치고 복제된 도형은 다시 삭제해야하는 경우가 있기 때문에 미리 만들어둔 함수입니다. 코드가 간단하니 별다른 설명은 생략하도록 하겠습니다. 

다만, Duplicate 뒤에 (1)을 붙여준 이유는 Duplicate를 실행했을 때, 복제 후 ShapeRange로 반환되기 때문이며, 복제된 ShapeRange 중 1번째 아이템(Shape)을 반환하라고 표현해준 것입니다.

'-----------------------------------------

Function Sh_Copy(iSh As Shape, Optional iOffsetX As Single = 0, Optional iOffsetY As Single = 0) As Shape
  Dim tSh As Shape
  Set tSh = iSh.Duplicate(1)
  tSh.Left = iSh.Left + iOffsetX
  tSh.Top = iSh.Top + iOffsetY
  Set Sh_Copy = tSh
End Function

많이 본 글 :