programing

Excel VBA에서 기본 응용 프로그램을 사용하여 파일을 여는 방법

abcjava 2023. 4. 21. 20:06
반응형

Excel VBA에서 기본 응용 프로그램을 사용하여 파일을 여는 방법

파일 경로와 이름이 A열에 있는 Excel 스프레드시트를 원합니다.매크로가 실행될 때 A1에서 지정된 파일을 사용자의 컴퓨터에서 열어야 한다고 가정합니다.파일은 .doc, .xls, .txt 등입니다.vba가 어플리케이션의 전체 경로를 알아야 하는 것이 아니라, 어떻게 vba가 머신에 "이 파일을 열고 확장자와 관련된 어플리케이션을 사용하세요"라고 지시할 수 있습니까?

풀 패스로 동작하는 것은 이미 알고 있습니다.

dblShellReturned = Shell("C:\Windows\System32\notepad.exe myfile.txt, vbNormalFocus)

어떻게 하면 다음과 같은 기능을 할 수 있을까요?

dblShellReturned = Shell("myfile.txt", vbNormalFocus) ' how do I get this to work

잘 부탁드립니다!

Excel & Word에서 사용할 수 있습니다.

Sub runit()
   Dim Shex As Object
   Set Shex = CreateObject("Shell.Application")
   tgtfile = "C:\Nax\dud.txt"
   Shex.Open (tgtfile)
End Sub

또는 아래 Expenzor의 코멘트에 따르면

CreateObject("Shell.Application").Open("C:\Nax\dud.txt")

VBA의 Shell 명령에 exe가 필요하기 때문에 explor.exe를 실행하여 인수로 파일 경로를 전달합니다.*.lnk 단축키 및 웹 URL에서도 작동하는 것 같습니다.

Shell "explorer.exe C:\myfile.txt"

다음 코드는 템플릿입니다.그러나 기본(작업) 디렉토리를 파일 위치로 업데이트해야 할 수도 있습니다.

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                   (ByVal hwnd As Long, ByVal lpszOp As String, _
                    ByVal lpszFile As String, ByVal lpszParams As String, _
                    ByVal LpszDir As String, ByVal FsShowCmd As Long) _

Function StartDoc(DocName As String) As Long
      Dim Scr_hDC As Long
      Scr_hDC = GetDesktopWindow()
      StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _
      "", "C:\", SW_SHOWNORMAL)
 End Function

기존 답변(점수 부족)에 대해 코멘트를 할 수 없기 때문에 정보를 추가하기 위해 답변합니다.

Access 2010에서 작업하는 동안 다음과 같은 구문을 사용하여 사일런트 장애가 발생했습니다.

Dim URL As String
URL = "http://foo.com/"
CreateObject("Shell.Application").Open URL

포장을 하면 효과를 볼 수 있을 거야URL다만, 서브루틴(함수 제외) 콜 구문에 대해서는 잘못된 것 같습니다.반환값을 삼키려고 했지만 괄호를 두 번 올리지 않으면 함수 호출 구문에서 실패했습니다.저는 괄호가 단지 통사적인 설탕이 아니라는 것을 깨달았습니다. - 그들은 무언가를 하고 있어야만 했고, 이것은 그들이 암묵적인 캐스팅을 용이하게 하고 있을지도 모른다고 믿게 만들었습니다.

나는 그것을 알아챘다.Open기대하다Variant, 가 아닙니다.String그래서 노력했어요.CVar효과가 있었어요그런 점에서 다음 방법은 "왜 여기에 관련 없는 괄호가 있는가?"라는 질문을 최소화할 수 있기 때문에 제가 선호하는 접근법입니다.

Dim URL As String
URL = "http://foo.com/"
CreateObject("Shell.Application").Open CVar(URL)

OLE Automation 통화를 할 때는 Access VBA가 적절한 캐스트를 하도록 명시해야 합니다.

Shell32.Shell COM 오브젝트 일명Shell.Application를 감싸는 데 사용할 수 있습니다.ShellExecuteWin32 API 함수:

  • 참조 추가Microsoft Shell Controls And Automation를 통해 VBA 프로젝트에 라이브러리를 입력합니다.Tools->References...,그리고나서

    Dim a As New Shell32.Shell
    Call a.ShellExecute("desktop.ini")
    
  • 또는 참조가 없는 경우:

    Call CreateObject("Shell.Application").ShellExecute("desktop.ini")
    

, 「WinXP」(「WinXP」)입니다.ShellExecute멤버 리스트에는 없습니다(단, 동작합니다).

언급URL : https://stackoverflow.com/questions/18921168/how-can-excel-vba-open-file-using-default-application

반응형