연결된 모든 파일을 Excel 2003 문서로 가져 오기


0

Excel 2003 문서에서 모든 링크 된 파일의 목록을 얻고 싶습니다. 더 좋게도 문서에 링크 된 모든 파일을 자동으로 검색하여 압축합니다. 그러한 작업이 가능합니까? 수동으로 파일을 수집하는 것은 매우 지루한 일입니다.


Excel 파일의 모든 하이퍼 링크를 확인하고 모든 뾰족한 파일을 패키지로 압축하고 싶습니까? 필요할 경우 VBA 또는 적어도 일부 VBS 도움말을 사용하여이 작업을 수행 할 수 있습니다.
JMax

1
업데이트 소스로 사용되는 다른 통합 문서의 워크 시트와 마찬가지로 링크 된 파일을 의미하지 않습니다.
deed02392

답변:


4

이를 수행하는 더 쉬운 방법은 .LinkSources 방법.

예를 들어 아래 코드는 Excel 파일에 대한 모든 링크 목록을 인쇄합니다.

Sub PrintLinks()
   Dim v() As Variant, i As Integer
   v = ThisWorkbook.LinkSources(XlLink.xlExcelLinks)
   For i = 1 To UBound(v)
      Debug.Print v(i)
   Next i
End Sub

1

여기에 시작이 있습니다. 이 매크로는 통합 문서의 모든 수식에서 파일 이름을 찾아 링크 된 모든 통합 문서 목록을 반환합니다. 한 가지 단점은 통합 문서가 현재 열려 있지 않은 경우에만 통합 문서의 파일 경로를 반환한다는 것입니다. 나는 그 방법을 찾아내는 시간을 가지지 않았지만 좋은 소식은 통합 문서가 이미 열려 있으면 파일 경로를 알아야한다는 것입니다.

Sub getlinks()

Dim ws As Worksheet
Dim tmpR As Range, cellR As Range
Dim links() As String
Dim i As Integer, j As Integer

j = 0
'Look through all formulas for workbook references. Store all refs in an array.
For Each ws In ThisWorkbook.Worksheets
    Set tmpR = ws.UsedRange
    For Each cellR In tmpR.Cells
        i = InStr(cellR.Formula, "'")
        If i <> 0 Then
            ReDim Preserve links(0 To j) As String
            links(j) = Mid(cellR.Formula, i, InStr(i + 1, cellR.Formula, "'") - i)
            j = j + 1
            Do While i <> 0
                On Error GoTo ErrHand
                i = InStr(i + 1, cellR.Formula, "'")
                i = InStr(i + 1, cellR.Formula, "'")
                If i <> 0 Then
                    ReDim Preserve links(0 To j) As String
                    links(j) = Mid(cellR.Formula, i, InStr(i + 1, cellR.Formula, "'") - i)
                    j = j + 1
                End If
            Loop
        End If
    Next cellR
Next ws

'Add new worksheet to post list of links.
Set ws = Sheets.Add
ws.Name = "List of Linked Workbooks"

Set tmpR = ws.Range("A1").Resize(UBound(links) + 1, 1)
tmpR = Application.WorksheetFunction.Transpose(links)

'Clean up output.
For Each cellR In tmpR
    cellR = Left(cellR.Value, InStr(cellR.Value, "]") - 1)
    cellR = Replace(cellR.Value, "[", "")
Next cellR
'Code to remove duplicates from list.  .RemoveDuplicates property only works for Excel 2007 and later. Line is commented out below.
'tmpR.RemoveDuplicates Columns:=1, Header:=xlNo
Exit Sub

ErrHand:
i = 0
Resume Next

End Sub

꽤 굉장한, 벌레가 흘러 나옵니다 - 테드의 추위와 같은 프레드의 코트와 같은 텍스트와 같은 어포 스트로피가있는 셀을 잡습니다. s coat as ted 링크로. 나는 초기 InStr을 On으로 수정하려고 시도했다. =' 대신에 많은 오류가 발생했습니다. 또한 덤핑 전에 배열을 고유하게 만들 수 있는지 궁금합니다. 내 통합 문서는이 매크로로 10,000 행을 제공하며 대부분이 동일합니다. 나는 유일한 목록 일을 할 수 있지만 VBScript 솔루션을 알고 있다면 편리 할 수 ​​있다는 것을 알고 있습니다. :)
deed02392

아아, 저는 아포스트로피가 문제가되지 않기를 바랬습니다. 중복을 제거하기 위해 줄을 만들었지 만 Excel 2003을 사용하고 있다는 것을 깨달았을 때 주석 처리했습니다. .RemoveDuplicates 범위 속성 (또는 그래서 내가 읽었습니다. 그것을 밖으로 시도하려는 경우 그냥 줄 시작 부분에서 아포스트로피를 제거하기 전에 Exit Sub ). 그래도 작동하지 않으면 매크로에 통합 할 수있는 중복 제거를 위해 온라인에서 사용할 수있는 몇 가지 vba 솔루션이 있습니다.
Excellll

감사합니다 Excell, 아포스트로피 문제에 대한 해결 방법은 무엇입니까? 어쨌든 누군가가 Google에서이 질문을 사용하게 될 것이므로 시간을 낭비하지 않으려 고 절망하지 마십시오.
deed02392

이제 작업 할 시간이 없지만 각 통합 문서 참조의 시작을 찾기 위해 정규식 솔루션을 구현할 수 있습니다. '[A-Z\[].
Excellll
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.