업데이트 링크 경고를 억제하는 방법은 무엇입니까?


109

많은 Excel 파일을 여는 스크립트를 작성하려고합니다. 계속 메시지가 표시됩니다.

This workbook contains links to other data sources.

이 메시지가 나타나지 않도록 Don't Update하여 각 통합 문서를 클릭하지 않고도 스크립트가 모든 통합 문서를 자동으로 살펴볼 수 있도록합니다 . 현재 다음을 사용하고 있습니다.

function getWorkbook(bkPath as string) as workbook

Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)

end function

그러나 메시지는 여전히 나타납니다. 어떻게 억제 할 수 있습니까?

편집 : 링크가 끊어진 통합 문서에 대해이 메시지가 표시되는 것 같습니다. 거짓으로 This workbook contains one or more links that cannot be updated설정했기 때문에 메시지 가 표시되지 않았습니다 DisplayAlerts. 통합 문서는 Windows 서버의 폴더에있는 동등한 파일에 연결되어 있으므로 일치하는 파일이 해당 폴더에서 삭제되면 (비즈니스 흐름의 일부로 발생) 연결이 끊어집니다. 링크가 끊어졌을 때 경고를 억제 할 수 있습니까?

또한 Excel 2010을 사용하고 있습니다.


1
@SiddharthRout과의 토론에서 이제 원인이 Excel 버전마다 다른 설정임을 알 수 있습니다. 대부분 Excel 2010 이상을 사용하는 경우 (Siddharth Rout에는 2010도 있음), 2007을 사용하고 링크 인 경우 경고가 전혀 표시되지 않습니다. 괜찮습니다. 우리는 더 많은 조사를 수행하고 작동하는 해결책으로 돌아갈 것입니다-나는 그렇게 희망합니다) 이제 Siddharth Rout의 대답을 시도하십시오.
Peter L.

2
매우 흥미로운 케이스에 대한 내 찬성!
Peter L.

@PeterL. 수동으로 파일을 열어도 업데이트 링크가 나오지 않기 때문에 어딘가에 누락 된 설정이있는 것 같습니다. 확인하기 전에 Excel 2007에서 테스트 해 보겠습니다. :)
Siddharth Rout 2013

문제 파일의 샘플을 게시 할 수 있습니까? 링크의 본질을 보는 것이 좋을 것입니다
brettdj

@brettdj, 독점이므로 전체 파일을 게시 할 수 없습니다. 링크에 문제가 있는지 조사 할 것입니다.
sigil

답변:


139

최신 정보:

모든 세부 사항을 요약하고 논의한 후 옵션을 확인하는 데 2 ​​시간을 보냈으며이 업데이트는 모든 i.

준비

우선, VMWare로 구동되는 Clean Win7 SP1 Ultimate x64 가상 머신에 깨끗한 Office 2010 x86 설치를 수행했습니다 (이는 일상적인 테스트 작업의 일반적인 루틴이므로 많은 작업을 배포했습니다).

그런 다음 다음 Excel 옵션 만 변경했습니다 (즉, 다른 모든 옵션은 설치 후 그대로 둡니다).

  • Advanced > General > Ask to update automatic links 확인 :

자동 링크 업데이트 요청

  • Trust Center > Trust Center Settings... > External Content > Enable All... (데이터 연결과 관련된 것이이 경우에 중요하지 않을 가능성이 높지만) :

외부 콘텐츠

전제 조건

나는 준비에 배치 C:\당 정확히 같은 통합 문서 @Siddharth Rout(사용자의 편의를 위해 공유) 자신의 업데이트 대답 제안 : https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx 링크 된 책은 다음되었다 삭제 그래서 공유에 링크 책을 사용할 수 없습니다 (확실히).

수동 열기

위의 공유 파일은 열 때 (위에 나열된 Excel 옵션이 있음) 2 개의 경고가 나타나는 순서대로 표시됩니다.

경고 # 1

이 통합 문서에는 다른 데이터 원본에 대한 링크가 포함되어 있습니다.

를 클릭 한 후 Update예상대로 다른 것을 얻었습니다.

경고 # 2

이 통합 문서에는 업데이트 할 수없는 링크가 하나 이상 포함되어 있습니다.

그래서 내 테스트 환경이 이제 OP's) 와 거의 비슷하다고 생각합니다.

VBA 열기

이제 가능한 모든 옵션을 단계별로 시도하여 그림을 명확하게 만들겠습니다. 단순성을 위해 관련 코드 줄만 공유하겠습니다 (코드가 포함 된 전체 샘플 파일은 결국 공유됩니다).

1. 간단한 Application.Workbooks.Open

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"

당연히 위의 수동 열기와 같이 두 가지 경고가 모두 생성됩니다.

2. Application.DisplayAlerts = False

Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True

이 코드로 끝 경고 # 1 (및 중 옵션을 클릭 Update/ Don't Update) 더 경고, 즉 생산하지 Application.DisplayAlerts = False억압 경고 # 2 .

3. Application.AskToUpdateLinks = False

Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True

반대로이 DisplayAlerts코드는 WARNING # 2 로만 끝납니다 . 즉, WARNING # 1을Application.AskToUpdateLinks = False 억제 합니다.

4. 이중 거짓

Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True

분명히이 코드는 BOTH WARNINGS 를 억제하는 것으로 끝납니다 .

5. UpdateLinks : = False

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False

마지막으로이 단선 솔루션 (원래에서 제안 @brettdj)은 Double False와 동일한 방식으로 작동합니다. 경고 가 표시되지 않습니다!

결론

좋은 테스트 방법과 매우 중요한 해결 사례를 제외하고 (통합 문서를 타사에 보내는 동안 매일 이러한 문제에 직면 할 수 있으며 이제 준비가되었습니다.) 다음 두 가지를 더 배웠습니다.

  1. Excel 옵션은 버전에 관계없이 중요합니다. 특히 VBA 솔루션을 사용할 때는 더욱 그렇습니다.
  2. 모든 문제에는 명확하지 않고 복잡한 문제와 함께 짧고 우아한 해결책이 있습니다. 이에 대한 증거가 하나 더 있습니다!)

솔루션에 기여한 모든 사람, 특히 질문을 제기 한 OP에게 감사드립니다. 내 조사와 철저히 설명 된 테스트 단계가 나에게만 도움이 되었기를 바랍니다.)

위 코드 샘플이 포함 된 샘플 파일이 공유됩니다 (많은 줄이 의도적으로 주석 처리됨) : https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

원래 답변 ( 특정 옵션을 사용 하여 Excel 2007에 대해 테스트 됨 ) :

이 코드는 나를 위해 잘 작동합니다 InputFolder. 다음 에서 와일드 카드를 사용하여 지정된 모든 Excel 파일을 반복합니다 .

Sub WorkbookOpening2007()

Dim InputFolder As String
Dim LoopFileNameExt As String

InputFolder = "D:\DOCUMENTS\" 'Trailing "\" is required!

LoopFileNameExt = Dir(InputFolder & "*.xls?")
Do While LoopFileNameExt <> ""

Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
Application.DisplayAlerts = True

LoopFileNameExt = Dir
Loop

End Sub

경고없이 외부 링크를 사용할 수없는 책으로 시도했습니다.

샘플 파일 : https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm


6
Application.DisplayAlerts = False이러한 경고를 비활성화하지 않습니다 :)
Siddharth Rout

@SiddharthRout Sid 나는 그들을 보지 않는다고 맹세한다 : 나는 그러한 링크가있는 파일을 가지고 있고 그것을 수동으로 여는 동안 경고를 본다. 위의 스크립트로-경고 없음) 비디오를 공유 할 수 있습니다.))) Excel 2007-혹시라도.
Peter L.

Ok 이것을 시도하십시오 :) 두 개의 새 통합 문서를 엽니 다. book1.xlsx 및 book2.xlsx로 저장합니다. book1의 A1 셀에 "="를 입력하고 Book2의 A1 셀을 가리 킵니다. 원하는 경우 Book2의 A1 셀에 무언가를 입력 한 다음 두 통합 문서를 닫습니다. 이제 코드를 사용하여 book1을 열면 여전히 프롬프트가 표시됩니다. :)
Siddharth Rout

또한 위의 연습을 실행하기 전에 직접 실행 ?Application.AskToUpdateLinks창을 확인하십시오 . 이미 false로 설정하거나 사실 ...입니다
싯다 르트 나라 얀 패주

2
brettdj에 +1. 모든 보고서가 유사한 경우 고객은) 행복해야합니다
크세 니아

22

Excel의 VBA 편집기를 열고 직접 실행 창에 입력합니다 (스크린 샷 참조).

Application.AskToUpdateLinks = False 

Excel을 닫은 다음 파일을 엽니 다. 다시 묻지 않습니다. 통합 문서를 닫을 때 재설정해야합니다. 그렇지 않으면 다른 통합 문서에서도 작동하지 않습니다.

스크린 샷 :

여기에 이미지 설명 입력

편집하다

따라서 코드에 적용하면 코드는 다음과 같습니다.

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

후속 조치

Sigil, 아래 코드는 링크가 끊어진 파일에서도 작동합니다. 다음은 내 테스트 코드입니다.

시험 조건

  1. 2 개의 새 파일을 만듭니다. 그 이름 Sample1.xlsxSample2.xlsx그들을에 저장C:\
  2. 의 셀 A1Sample1.xlsx다음 수식을 입력하십시오.='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. 두 파일을 모두 저장하고 닫습니다.
  4. Sample2.xlsx 삭제 !!!
  5. 새 통합 문서를 열고 모듈이이 코드를 붙여넣고 Sample. 프롬프트가 표시되지 않음을 알 수 있습니다.

암호

Option Explicit

Sub Sample()
    getWorkbook "c:\Sample1.xlsx"
End Sub

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

3
이 코드는 메시지를 비활성화한다는 점 에서 Sid ( xl2010 ) 에 효과적 이지만 백그라운드에서 링크를 업데이트했습니다. `Set getWorkbook = Workbooks.Open (bkPath, False)`를 사용하면 경고가 표시되지 않고 업데이트가 실행되지 않습니다. xl03xl10
brettdj

1
감사합니다 Dave. :) BTW, 나는 당신이 xl03과 xl2007을 의미한다고 생각합니다. : P 또한 귀하의 제안을 반영하기 위해 위의 게시물을 편집했습니다.
Siddharth Rout 2013

1
@brettdj 감사합니다! 우리는 그날 아침 Sid와 함께 사건을 파악하기 위해 좋은 시간을 보냈습니다. 그렇다면 위의 코드는 모든 Excel 버전에 대한 모든 경고를 억제하고 링크를 자동으로 업데이트 합니까? 업데이트를 방지하려면 코드를 어떻게 수정해야합니까? 죄송합니다. 옵션에서 약간 잃어 버렸지 만 모두 올바르게 설명했으면 좋겠습니다.)
Peter L.

@brettdj Application.DisplayAlerts = False가 추가되면 어떻게 될까요?
Peter L.

1
@sigil : 워크 북을 보지 않고서는 더 이상 댓글을 달 수 없습니다. 다른 조건으로 코드를 테스트했으며 완벽하게 작동합니다. 사실은 ... 그 경고를 억제하는 올바른 방법입니다
싯다 르트 나라 얀 패주

6

Excel 2016 통합 문서 / 파일을 만든 다음 이름을 변경했을 때 비슷한 문제가 있었지만 어떻게 든 이전 통합 문서 이름이 유지되었습니다. 인터넷 검색을 많이 한 후 ... 글쎄, 거기에서 최종 답변을 찾지 못했습니다 ...

데이터-> 링크 편집-> 시작 프롬프트 (하단)로 이동 한 다음 가장 적합한 옵션을 선택하십시오.


3
이것이 최상의 솔루션입니다. 이 선택이 이루어진 통합 문서에만 영향을 미치며 VBA가 필요하지 않습니다.
Gaia

5

내 통합 문서를 Excel에서 수동으로 열 때 (VBA를 통해 프로그래밍 방식으로 여는 것과는 반대로) 다른 통합 문서에 대한 링크를 업데이트할지 묻는 메시지를 표시하지 않으려했습니다. Application.AskToUpdateLinks = FalseAuto_Open()매크로 의 첫 번째 줄로 포함하려고 시도했지만 작동하지 않았습니다. 그러나 모듈 의 Workbook_Open()함수에 대신 넣으면 ThisWorkbook훌륭하게 작동 한다는 것을 발견 했습니다. 대화 상자는 억제되지만 업데이트는 여전히 백그라운드에서 자동으로 발생합니다.

 Private Sub Workbook_Open()
    ' Suppress dialog & update automatically without asking
    Application.AskToUpdateLinks = False
End Sub

좋은 생각; 안타깝게도이 프로젝트에서는 내용을 수정할 수없는 통합 문서 세트를 열어야했습니다. 따라서 Workbook_Open()내 대상 집합의 각 통합 문서에 대한 이벤트 를 설정할 방법이 없습니다 .
2013 년

3

(댓글을 추가 할 담당자 포인트가 충분하지 않지만 여기에 답변에 대한 명확성을 추가하고 싶습니다)

Application.AskToUpdateLinks = False는 아마도 원하는 것이 아닙니다.

False로 설정하면 MS Excel 자동으로 링크를 업데이트하려고 시도하지만 사용자에게 미리 메시지를 표시하지 않고 반 직관적입니다.

링크 업데이트 하지 않고 파일을 열려면 올바른 해결책 은 다음과 같아야합니다.

Workbook.Open (UpdateLinks : = 0)

관련 링크 : AskToUpdateLinks = False 및 UpdateLinks의 차이점 : = 0


2

최소한이 작업을 처리 할 수있는 임시 해결책을 찾았습니다. "링크 업데이트"창이 나타날 때까지 기다린 다음 "업데이트 안 함"버튼을 클릭하는 간단한 AutoIt 스크립트를 작성했습니다. 코드는 다음과 같습니다.

while 1
if winexists("Microsoft Excel","This workbook contains links to other data sources.") Then
   controlclick("Microsoft Excel","This workbook contains links to other data sources.",2)
EndIf
WEnd

지금까지 이것이 작동하는 것 같습니다. 그러나이 솔루션을 독립 실행 형 응용 프로그램으로 만들 수 있도록 완전히 VBA 인 솔루션을 찾고 싶습니다.


2

이 질문 (또는 그 일부)을 해결하는 데 추가 정보를 제공하기를 바랍니다.

이것은 Excel다른 파일 을 열 때 작동합니다 . 변경을 위해 Mr. Peter L. 의 코드 줄은 다음을 사용합니다.

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=3

이것은 MSDS. 효과는 경고없이 모든 것을 업데이트한다는 것입니다. 매크로를 기록하는 경우에도 확인할 수 있습니다.

에서는 MSDS이를 MS EXCEL 20102013. 나는 MS EXCEL 2016이것도 다루었 다고 생각한다 .

나는 MS EXCEL 2013이 주제와 거의 같은 상황에 처해 있습니다. 그래서 나는 항상 업데이트 링크 프롬프트 에 멈춰 A있는 Workbook_Open이벤트 코드 가있는 파일을 가지고 있습니다 . 이 파일에 다른 파일 (이라고 부름 )이 연결되어 있으며 피벗 테이블 은 데이터 모델을로드 할 수 있도록 파일을 열도록 강제합니다 . 백그라운드에서 자동으로 파일 을 열고 싶기 때문에 위에서 작성한 줄을으로 사용하고 더 큰 로딩 시간을 제외하고 문제 나 경고없이 파일에서 파일을 열고 완전히 업데이트했습니다. .BAAWindows("A.xlsx").visible = falseAB

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.