vba - programación - visual basic excel 2013
¿Cómo puede Excel abrir un archivo VBA usando la aplicación predeterminada? (4)
El código de abajo es una plantilla. Sin embargo, es posible que desee actualizar el directorio predeterminado (en funcionamiento) a la ubicación del archivo.
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
Quiero una hoja de cálculo de Excel que tenga una ruta de archivo y un nombre en la columna A. Cuando se ejecuta una macro, digamos que el archivo especificado en A1 debe abrirse en la máquina del usuario. El archivo podría ser .doc, .xls, .txt, etc ... en lugar de que mi vba necesite conocer la ruta completa de la aplicación, ¿cómo puedo hacer que vba le diga a la máquina? Abra este archivo y use su aplicación asociado con la extensión "?
Ya he encontrado esto para trabajar con la ruta completa:
dblShellReturned = Shell("C:/Windows/System32/notepad.exe myfile.txt, vbNormalFocus)
¿Cómo podría hacer que funcione con algo como:
dblShellReturned = Shell("myfile.txt", vbNormalFocus) '' how do I get this to work
¡Gracias de antemano!
El comando Shell de VBA quiere un exe, así que he estado iniciando el explorer.exe y pasando la ruta de mi archivo como argumento. También parece funcionar con accesos directos * .lnk y urls web.
Shell "explorer.exe C:/myfile.txt"
Esto funciona para mí en Excel y Word
Sub runit()
Dim Shex As Object
Set Shex = CreateObject("Shell.Application")
tgtfile = "C:/Nax/dud.txt"
Shex.Open (tgtfile)
End Sub
o ... según el comentario de Expenzor a continuación
CreateObject("Shell.Application").Open("C:/Nax/dud.txt")
Shell32.Shell
objeto COM de Shell32.Shell
también Shell.Application
como Shell.Application
puede usarse para Shell.Application
la función de la API de ShellExecute
Win32:
Agregue una referencia a la biblioteca de tipos
Microsoft Shell Controls And Automation
al proyecto VBA a través deTools->References...
, luegoDim a As New Shell32.Shell Call a.ShellExecute("desktop.ini")
Alternativamente, sin ninguna referencia:
Call CreateObject("Shell.Application").ShellExecute("desktop.ini")
Curiosamente, aquí (WinXP), cuando se usa una variable escrita (que proporciona autocompletar), ShellExecute
encuentra en la lista de miembros (pero funciona de todos modos).