명명 된 범위를 다른 통합 문서로 복사


0

하나의 통합 문서에서 다른 통합 문서로 명명 된 셀을 복사하는이 VBA 코드가 있지만 나에게 제공합니다 Error 9: Subscript out of range. 어떤 아이디어가 있습니까?

Sub namexfr()
 wbs = "C:\Users\MousaviM\Desktop\Book1.xlsm"
 wbd = "C:\Users\MousaviM\Desktop\Book2.xlsm"
 For Each nam In Workbooks(wbs).Names
  Workbooks(wbd).Names.Add Name:=nam.Name, RefersToR1C1:=nam.RefersToR1C1
 Next
End Sub

어느 줄에서 오류가 발생합니까?
Excellll

Next 이전의 마지막 행
Masoud

VBA 편집기에서 F8을 사용하여 코드를 단계별로 살펴 보셨습니까? 해당 라인에 처음 도달 할 때 오류가 발생합니까? 아니면 오류가 발생하기 전에 오류가 몇 번 반복됩니까?
Excellll April

반복되지 않으며 처음 라인에 도달하면 오류가 발생합니다. 이 사이트 에서이 코드를 찾았습니다 .VBA에 능숙하지 않습니다. R1C1은 무엇을 의미합니까? 그게 내 명명 된 셀의 범위에 있어야합니까?
Masoud

통합 문서에 (1) 동일한 수의 워크 시트가 있습니까? (2) 시트의 이름이 동일합니까?
Excellll April

답변:


1

따라서 문제는 Workbooks(wbs)통합 문서 개체로 인식되지 않습니다. 괄호 안의 인수는 파일 경로가 아닌 인덱스, 즉 정수일 것으로 예상되기 때문입니다.

한 가지 해결 방법은 통합 문서 컬렉션을 반복하여 원하는 경로를 열려있는 통합 문서 경로와 비교하는 것입니다. 그런 다음 통합 문서 개체를 일치하는 통합 문서와 동일하게 설정하십시오.

아래 코드에서 각 통합 문서에 대해이 작업을 수행했습니다. 많은 통합 문서가 열려 있지 않기 때문에 여러 루프가 계산 상 중요하지 않습니다.

Sub namexfr()
Dim wbs As Workbook, wbd As Workbook, wb As Workbook
wbspath = "C:\Users\MousaviM\Desktop\Book1.xlsm"
wbdpath = "C:\Users\MousaviM\Desktop\Book2.xlsm"
For Each wb In Workbooks
    If wb.FullName = wbspath Then
        Set wbs = wb
        Exit For
    End If
Next wb
For Each wb In Workbooks
    If wb.FullName = wbdpath Then
        Set wbd = wb
        Exit For
    End If
Next wb
For Each nam In wbs.Names
    wbd.Names.Add Name:=nam.Name, RefersToR1C1:=nam.RefersToR1C1
Next
End Sub

경로를 제거하고 두 통합 문서를 모두 열면 첫 번째 코드가 작동한다는 것을 깨달았습니다. 그러나 전송할 셀 이름을 선택하는 방법이 있습니까?
Masoud

For Each이름을 통해 루프 안에 조건을 포함시켜야합니다 . IF nam이 조건 X, Y, Z를 만족하는 경우 중복 이름을에 추가하십시오 wbd. 그렇지 않으면 건너 뛰십시오.
Excellll

+1 Nice catch-놓쳤습니다. 난 그냥 교체 한 것 for each ...A를을 for each .. in wbs.names하지만,이 솔루션은보다 강력한 보인다.
Raystafarian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.