표시하지 않고 VBA로 읽기 위해 Excel 파일 열기
매크로를 사용하여 기존 Excel 파일을 검색하고 싶지만 해당 파일이 코드로 열릴 때 표시하고 싶지 않습니다. 말하자면 "백그라운드에서"열 수있는 방법이 있습니까?
현재 Excel 인스턴스에서 보이지 않게 열 수 있는지 확실하지 않습니다.
하지만 Excel의 새 인스턴스를 열고 숨긴 다음 통합 문서를 열 수 있습니다.
Dim app as New Excel.Application
app.Visible = False 'Visible is False by default, so this isn't necessary
Dim book As Excel.Workbook
Set book = app.Workbooks.Add(fileName)
'
' Do what you have to do
'
book.Close SaveChanges:=False
app.Quit
Set app = Nothing
다른 사람들이 게시 했으므로 열린 통합 문서를 모두 마친 후 정리하십시오.
그게 당신의 필요에 맞다면 간단히
Application.ScreenUpdating = False
Excel의 두 번째 인스턴스를 사용하여 속도를 늦추는 대신 코드를 가속화 할 수 있다는 추가 이점이 있습니다.
기존 Excel 인스턴스에서 숨겨진 통합 문서를 열려면 다음을 사용하십시오.
Application.ScreenUpdating = False
Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
답을 얻었더라도이 질문을 찾은 사람들을 위해 Excel 스프레드 시트를 JET 데이터 저장소로 열 수도 있습니다. 내가 사용한 프로젝트에서 연결 문자열을 빌리면 다음과 같이 보일 것입니다.
strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & objFile.Path & ";Extended Properties=""Excel 8.0;HDR=Yes"""
strSQL = "SELECT * FROM [RegistrationList$] ORDER BY DateToRegister DESC"
"RegistrationList"는 통합 문서의 탭 이름입니다. 이런 식으로 시트에 액세스 할 수있는 것과 할 수없는 것에 대한 세부 사항이 웹에 떠 다니는 몇 가지 튜토리얼이 있습니다.
내가 추가 할 것이라고 생각했습니다. :)
활성 창을 조작하지 않는 훨씬 간단한 접근 방식 :
Dim wb As Workbook
Set wb = Workbooks.Open("workbook.xlsx")
wb.Windows(1).Visible = False
통합 문서의 Windows 색인은 항상 1
. 이것이 사실이 아닌 경쟁 조건을 아는 사람이 있으면 알려주십시오.
iDevlop과 Ashok의 답변 모두에 대한 문제는 근본적인 문제는 Open 메서드가 Application.ScreenUpdating 설정을 False로 유지하지 못하는 Excel 디자인 결함 (분명히)이라는 것입니다. 결과적으로 False로 설정하는 것은이 문제에 도움이되지 않습니다.
Patrick McDonald의 솔루션이 Excel의 두 번째 인스턴스를 시작하는 오버 헤드로 인해 너무 부담이되는 경우 내가 찾은 최고의 솔루션은 가능한 한 빨리 원래 창을 다시 활성화하여 열린 통합 문서가 표시되는 시간을 최소화하는 것입니다.
Dim TempWkBk As Workbook
Dim CurrentWin As Window
Set CurrentWin = ActiveWindow
Set TempWkBk = Workbooks.Open(SomeFilePath)
CurrentWin.Activate 'Allows only a VERY brief flash of the opened workbook
TempWkBk.Windows(1).Visible = False 'Only necessary if you also need to prevent
'the user from manually accessing the opened
'workbook before it is closed.
'Operate on the new workbook, which is not visible to the user, then close it...
새 Excel 인스턴스에서 엽니 다.
Sub Test()
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
Dim w As Workbook
Set w = xl.Workbooks.Add()
MsgBox "Not visible yet..."
xl.Visible = True
w.Close False
Set xl = Nothing
End Sub
완료 한 후에는 정리하는 것을 기억해야합니다.
통합 문서를 숨김으로 연 다음 사용자가 닫을 때 메시지가 표시되지 않도록 "저장 됨"으로 설정합니다.
Dim w As Workbooks
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Set w = Workbooks
w.Open Filename:="\\server\PriceList.xlsx", UpdateLinks:=False, ReadOnly:=True 'this is the data file were going to be opening
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
w.Item(2).Saved = True 'this will suppress the safe prompt for the data file only
End Sub
이것은 Ashok이 게시 한 답변에서 다소 파생 된 것입니다.
By doing it this way though you will not get prompted to save changes back to the Excel file your reading from. This is great if the Excel file your reading from is intended as a data source for validation. For example if the workbook contains product names and price data it can be hidden and you can show an Excel file that represents an invoice with drop downs for product that validates from that price list.
You can then store the price list on a shared location on a network somewhere and make it read-only.
In excel, hide the workbooks, and save them as hidden. When your app loads them they will not be shown.
Edit: upon re-reading, it became clear that these workbooks are not part of your application. Such a solution would be inappropriate for user workbooks.
참고URL : https://stackoverflow.com/questions/579797/open-excel-file-for-reading-with-vba-without-display
'Program Tip' 카테고리의 다른 글
SourceSet 'instrumentTest'는 Android Gradle 플러그인에서 인식되지 않습니다. (0) | 2020.12.14 |
---|---|
Haskell에서 빈 목록을 확인하기 위해 == [] 대신 null 함수를 사용하는 이유는 무엇입니까? (0) | 2020.12.14 |
Enum.GetValues () 반환 유형 (0) | 2020.12.14 |
Python의 string.replace 대 re.sub 사용 (0) | 2020.12.14 |
Visual Studio에서 KeyDown 이벤트, KeyPress 이벤트 및 KeyUp 이벤트의 차이점 (0) | 2020.12.14 |