visual programación programacion para lenguaje ejemplos comandos codigos codigo vba excel-vba excel

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 de Tools->References... , luego

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