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

많은 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을 사용하고 있습니다.



답변

최신 정보:

모든 세부 사항을 요약하고 논의한 후 옵션을 확인하는 데 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


답변

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


답변

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

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


답변

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

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


답변

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

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

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

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

Workbook.Open (UpdateLinks : = 0)

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


답변

최소한이 작업을 처리 할 수있는 임시 해결책을 찾았습니다. “링크 업데이트”창이 나타날 때까지 기다린 다음 “업데이트 안 함”버튼을 클릭하는 간단한 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 인 솔루션을 찾고 싶습니다.


답변

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

이것은 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