VBA에서 ExcuteExcel4Macro를 사용한 "="코피 페

개요



· 책 B에서 책 A의 시트에 "="가 붙은 문자열을 복사하려고하면 오류 1004가 발생했습니다.
· 문자열을 단일 따옴표로 이스케이프해도 동일한 오류가 발생했습니다.
・VBA로 값을 대입할 때에 싱글 쿼테이션을 붙여 주는 것으로 copipe 할 수 있었다

환경



· 프로덕션 환경: Excel2016
· Qiita 게재를 위한 테스트 환경: Excel2007

오류 정보



하고 싶은 일



· Sheet1의 B2에 있는 문장을 Sheet2의 A1에 복사하는 것


복수의 시트로부터 값을 루프로 카피해 파일 출력하는 매크로를 만들고 있었다. 순조롭게 움직이고 있었지만 아무래도 위 그림과 같은 에러가 나왔다.
한 개씩 분석하고 있었는데, 아래 그림과 같이 "="로 시작하는 문장 때 정지하는 것을 알았다.



오류가 발생한 소스



test.xlsm
Sheets(2).Cells(1, 1) = ExecuteExcel4Macro("Bpath[Book1.xlsx]sheet1'!R2C2")

통상의 카피라면 문제는 없다고 생각되는 내용으로, 사실 이 이외의 수치나 캐릭터 라인에서는 순조롭게 copipe 할 수 있었다.

원인



여러가지 검증한 결과, 페이스트 「되는 측」의 표시 형식에 의존하는 것을 알 수 있었다.

엑셀에서 코피페의 경우




왼쪽이 추출원, 오른쪽이 추출처

엑셀로 복사하면 추출원의 셀에 입력한 문자 그 자체가 복사된다.
따라서 추출 대상은 모든 표시 형식으로 추출 원본의 표시 형식으로 붙여 넣습니다.

표준이면 함수를 그대로 사용할 수있는 문자열이면 문자가됩니다.




다음에 ExcuteExcel4Macro를 사용해 추출처의 표시 형식을 표준과 문자열로 한 것으로 어떻게 되는지를 검증했다(A2가 대상).
추출원은 문자열의 "'=1+1"이지만, 추출처가 표준이 되어 있으면 함수의 반환값으로 출력된다.

이상으로부터 ExcuteExcel4Macro를 사용하면 추출원의 표시 형식이 캐릭터 라인에서도 추출처의 표시 형식에 의존한다고 하는 것이다.

즉 "="을 copipe하고 싶으면 매크로 측에서 문자열로 한다 ⇒ 이스케이프 해 주면 좋다



test.xlsm
Sheets(2).Cells(1, 1) ="'" & ExecuteExcel4Macro("Bpath[Book1.xlsx]sheet1'!R2C2")

그래서 "="를 매크로로 문자열 처리하려면 위와 같이 "'"를 ExcuteExcel4Macro 앞에 붙이면
그 결과 문자열이 붙여 넣어집니다.

애초에 왜 이런 일이 되었는가



실은 파일 자체는 짧은 코드가 쓰여진 파일로, 조건에 따라 코드에 행을 추가하거나
값을 변경하거나 할 필요가 있지만 수작업이라고 귀찮았다.
거기서 효율적으로 출력하기 위해서 매크로로 각 시트에 정규의 코드를 붙여, 거기에 대해서 매크로로 처리하는 것이었지만
이 정규 코드에는 "="로 시작하는 것이 있었다.
그때까지의 처리는 정상 종료하고 있었는데 마지막 마지막 코드가 이것으로 빠져 버렸다.
다만, 조사해도 잘 나오지 않았기 때문에 비망록이나 비슷한 상황의 사람의 도움이 된다고 생각했다.

좋은 웹페이지 즐겨찾기