2017-04-21 5 views
1

저는 VBA에서 매우 새로 운 것이지만 운이없는 질문을 검색해 보았습니다. A1의 파일 경로, B1의 통합 문서 이름 및 C1 & D1의 탭 이름을 나열하는 통합 문서가 있습니다. 셀 A1에서 파일을 열 다음 방금 원래 B1에서 연 통합 문서를 설정하고 C1 & D1에 워크 시트 이름을 설정하는 매크로를 작성하려고합니다. 그런 다음 한 줄 아래로 이동하여 프로세스를 반복하십시오. 나는 변수 경로/워크 북/시트를 정의하는 것을 제외하고 대부분을 처리 할 수 ​​있었다고 생각합니다. 아래는 지금까지 내가 생각해내는 것입니다. 누구든지 어떤 제안이 있겠습니까? 미리 감사드립니다!VBA에서 파일 경로 읽기

Dim Macro As Workbook 
Set Macro = Workbooks("Macros.xlsb") 
Workbooks.Open Range("A1") 
Dim WBRange As Range 
WBRange = Macro.Range("B1").Value 
Dim ParRange As Range 
Set ParRange = Macro.Range("C1").Value 
Dim CurrentWB As Workbook 
Set CurrentWB = WBRange 
Dim CurrentWS As Worksheet 
Set CurrentWS = ParRange 
+0

통합 문서에는 셀을 포함하는 워크 시트가 포함되어 있습니다. 통합 문서에는 셀이 들어 있지 않습니다. – Jeeped

+0

코드가 작동합니까? 통합 문서를 셀 값으로 설정? wbRange와 동일합니까? –

+0

@Nathan_Sav -'Workbooks.Open Range ("A1") 문법적으로 정확하지만 (활성 시트의 A1 셀에 이름이 지정된 통합 문서를 열지 만) 'Workbooks.Open Range ("A1 ") & Range ("B1 ")"로 표시됩니다. – YowE3K

답변

1

대신 사용해보십시오. 변수에 범위를 사용하는 것에 대해 약간 혼란스러운 것처럼 보입니다. 아래 코드를 참조하십시오.

' Use a better name than this for your variable 
Dim Macro As Workbook 
Set Macro = Workbooks("Macros.xlsb") 

Dim NewWorkbook As Workbook 
' Notice that I fully qualify my range reference here, and then specifically retrieve the value from the cell. 
Set NewWorkbook = Workbooks.Open(ThisWorkbook.Sheets("Sheetname").Range("A1").Value) 

' You dont retrieve the value here. You also don't specify the workbook/sheet the range is in. 
' Workbooks.Open Range("A1") 

Dim WBRange As Range 
' You always have to use set when assigning a value to an object 
' This was a mistake as well. 
' Set WBRange = Macro.Range("B1").Value 
Set WBRange = Macro.Range("B1") 

Dim ParRange As Range 
' This was my mistake and causes an error. See the fix below: 
' Set ParRange = Macro.Range("C1").Value 
Set ParRange = Macro.Range("C1") 

Dim CurrentWB As Workbook 
' Set CurrentWB = WBRange 
' I think you mean this: 
Set CurrentWB = Workbooks(WBRange.Value) 

Dim CurrentWS As Worksheet 
'Set CurrentWS = ParRange 
' Use this instead 
Set CurrentWS = CurrentWB.Sheets(ParRange.Value) 

먼저 범위를 사용할 때 항상 경로를 정규화하는 것이 가장 좋습니다. 먼저 통합 문서를 만든 다음 워크 시트를 만듭니다. 또한 설정된 워크 시트 변수를 사용할 수 있습니다.

다음으로 범위에서 값을 검색하는 경우 Range.Value을 사용해야합니다. Range의 기본 멤버가 Value 인 동안 잘못된 멤버가 검색되는 경우 (예 : Range 자체를 검색 할 수 있음)로 실행됩니다. 또한 한정자없이 해당 이름을 참조하여 워크 시트의 이름과 동일한 워크 시트를 설정할 수 없습니다. 이 이름을 인덱서로 사용할 수 있습니다. 위의 코드에서 통합 문서 이름을 사용하여 Workbooks 컬렉션에서 찾습니다. 워크 시트와 동일합니다.

이것이 도움이 되었기를 바랍니다.

+0

나는 배울 것이 많다! 귀하가 제공 한 코드로 업데이트하면 ParRange = Macro.Range ("C1")로 설정하십시오. 오류가있는 값 – Epoch

+0

오, 내 어리석은 실수. ".Value"를 제거하십시오. 이 경우 셀 자체가 필요하므로 "."을 사용하는 멤버 인 경우 검색을 시도하면 안됩니다. , Set ParRange = Macro.Range ("C1")하면 우리는 ParRange를 셀의 내용이 아니라 셀 자체를 가리 키도록 직접 할당합니다. 이것을 반영하도록 내 코드를 업데이트했습니다. –

+0

죄송합니다, 5 분 후에 댓글을 수정할 수 없다는 것을 깨달았습니다. 그러나 ".Value"를 제거하면 "Object가이 속성 또는 메서드 (오류 438)를 지원하지 않습니다."라는 오류가 발생합니다. (ParRange 및 WBRange에서) 참고로 매크로에서 더 적절한 이름) 통합 문서 셀 A1에는 파일 경로 (C : \ FolderFileName.xlsx)가 있고 B1 셀에는 파일 이름 (FileName.xlsx)이 있고 C1에는 탭 이름이 있습니다. 범위 함수에 대한 나의 이해는 단지 값을 저장한다는 것이다. B1에서 ".xlsx"부분을 제거하려고했지만 아무 것도 변경하지 않았습니다. – Epoch