programing

디스플레이 없이 VBA로 읽을 수 있도록 Excel 파일 열기

linuxpc 2023. 5. 16. 22:13
반응형

디스플레이 없이 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

ADO(AnonJr이 이미 설명한 바 있음)를 사용하고 SQL을 사용하는 것이 기존 방식으로 열지 않고 닫힌 워크북에서 데이터를 가져오는 가장 좋은 방법일 수 있습니다. 영상을 봐주세요.

않으면, 그지않면으, 도아마렇.GetObject(<filename with path>)가장 간결한 방법입니다.워크시트는 보이지 않지만 기존 방식으로 열린 다른 워크북과 마찬가지로 VBE의 프로젝트 탐색기 창에 나타납니다.

Dim wb As Workbook

Set wb = GetObject("C:\MyData.xlsx")  'Worksheets will remain invisible, no new window appears in the screen
' your codes here
wb.Close SaveChanges:=False

특정 시트를 읽으려면 워크북 변수를 정의할 필요가 없습니다.

Dim sh As Worksheet
Set sh = GetObject("C:\MyData.xlsx").Worksheets("MySheet")
' your codes here
sh.Parent.Close SaveChanges:=False 'Closes the associated workbook

활성 창 조작을 포함하지 않는 훨씬 간단한 접근 방식:

Dim wb As Workbook
Set wb = Workbooks.Open("workbook.xlsx")
wb.Windows(1).Visible = False

의 Windows 색인이어야 합니다.1이것을 사실이 아닌 것으로 만드는 인종 조건을 아는 사람이 있다면 저에게 알려주십시오.

답을 얻었지만 이 질문을 찾은 사람들은 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"

등록 목록은 워크북의 탭 이름입니다.이러한 방식으로 시트에 액세스할 수 있는 작업과 그렇지 않은 작업에 대한 세부 정보가 포함된 몇 가지 튜토리얼이 웹에서 떠돌고 있습니다.

그냥 덧붙이고 싶은 생각이 들었어요.:)

iDevlop과 Ashok의 답변 모두의 문제는 근본적인 문제가 Open 메서드가 응용 프로그램을 존중하지 못하는 Excel 설계 결함(분명히)이라는 것입니다.화면 업데이트 설정이 거짓입니다.따라서 False로 설정해도 이 문제에 도움이 되지 않습니다.

Excel의 두 번째 인스턴스를 시작해야 하는 오버헤드로 인해 Patrick McDonald의 솔루션이 너무 부담스럽다면 가능한 한 빨리 원래 창을 다시 활성화하여 열려 있는 워크북이 표시되는 시간을 최소화하는 것이 가장 좋은 해결책입니다.

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...

워크북을 숨김으로 연 다음 "저장됨"으로 설정하여 사용자가 닫을 때 메시지가 표시되지 않도록 합니다.

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

아쇼크가 올린 답변에서 다소 파생된 내용입니다.

이렇게 하면 읽기 시작한 Excel 파일에 변경 사항을 다시 저장하라는 메시지가 표시되지 않습니다.이는 읽기 시작한 Excel 파일이 유효성 검사를 위한 데이터 소스로 사용되는 경우에 유용합니다.예를 들어 워크북에 제품 이름과 가격 데이터가 포함된 경우 이를 숨길 수 있으며 해당 가격 목록에서 유효성을 확인하는 제품의 드롭다운이 있는 송장을 나타내는 Excel 파일을 표시할 수 있습니다.

그런 다음 네트워크의 공유 위치에 가격 리스트를 저장하고 읽기 전용으로 만들 수 있습니다.

새 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

당신은 당신이 끝난 후에 청소하는 것을 기억해야 합니다.

Excel에서 워크북을 숨기고 숨겨진 것으로 저장합니다.앱에서 로드할 때 해당 항목은 표시되지 않습니다.

편집: 다시 읽었을 때, 이 문제집들이 당신의 응용 프로그램의 일부가 아니라는 것이 분명해졌습니다.이러한 솔루션은 사용자 워크북에 적합하지 않습니다.

언급URL : https://stackoverflow.com/questions/579797/open-excel-file-for-reading-with-vba-without-display

반응형