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
를 감싸는 데 사용할 수 있습니다.ShellExecute
Win32 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
'programing' 카테고리의 다른 글
서버 사용방법global.asax의 MapPath()? (0) | 2023.04.21 |
---|---|
Excel VBA에 삽입 시 CopyOrigin (0) | 2023.04.21 |
'if' 문을 사용하여 종료 상태를 확인하는 방법 (0) | 2023.04.21 |
주 번호에서 주 시작 날짜와 주 종료 날짜를 가져옵니다. (0) | 2023.04.21 |
특정 위치에서 cmd 창을 열려면 어떻게 해야 합니까? (0) | 2023.04.21 |