많은 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와 동일한 방식으로 작동합니다. 경고 가 표시되지 않습니다!
결론
좋은 테스트 방법과 매우 중요한 해결 사례를 제외하고 (통합 문서를 타사에 보내는 동안 매일 이러한 문제에 직면 할 수 있으며 이제 준비가되었습니다.) 다음 두 가지를 더 배웠습니다.
- Excel 옵션은 버전에 관계없이 중요합니다. 특히 VBA 솔루션을 사용할 때는 더욱 그렇습니다.
- 모든 문제에는 명확하지 않고 복잡한 문제와 함께 짧고 우아한 해결책이 있습니다. 이에 대한 증거가 하나 더 있습니다!)
솔루션에 기여한 모든 사람, 특히 질문을 제기 한 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, 아래 코드는 링크가 끊어진 파일에서도 작동합니다. 다음은 내 테스트 코드입니다.
시험 조건
- 2 개의 새 파일을 만듭니다. 그 이름
Sample1.xlsx
과Sample2.xlsx
그들을에 저장C:\
- 의 셀
A1
에Sample1.xlsx
다음 수식을 입력하십시오.='C:\[Sample2.xlsx]Sheet1'!$A$1
- 두 파일을 모두 저장하고 닫습니다.
- Sample2.xlsx 삭제 !!!
- 새 통합 문서를 열고 모듈이이 코드를 붙여넣고
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 = False
내 Auto_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)
답변
최소한이 작업을 처리 할 수있는 임시 해결책을 찾았습니다. “링크 업데이트”창이 나타날 때까지 기다린 다음 “업데이트 안 함”버튼을 클릭하는 간단한 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 2010
및 2013
. 나는 MS EXCEL 2016
이것도 다루었 다고 생각한다 .
나는 MS EXCEL 2013
이 주제와 거의 같은 상황에 처해 있습니다. 그래서 나는 항상 업데이트 링크 프롬프트 에 멈춰 A
있는 Workbook_Open
이벤트 코드 가있는 파일을 가지고 있습니다 . 이 파일에 다른 파일 (이라고 부름 )이 연결되어 있으며 피벗 테이블 은 데이터 모델을로드 할 수 있도록 파일을 열도록 강제합니다 . 백그라운드에서 자동으로 파일 을 열고 싶기 때문에 위에서 작성한 줄을으로 사용하고 더 큰 로딩 시간을 제외하고 문제 나 경고없이 파일에서 파일을 열고 완전히 업데이트했습니다. .B
A
A
Windows("A.xlsx").visible = false
A
B