usar - que es una etiqueta en c#
Establecer la línea de comando Opción para acceder a VBA (2)
La mejor manera debe ser encontrar la aplicación asociada al tipo de archivo y luego iniciarla con los argumentos que necesita (incluido el archivo que se va a abrir).
Puede averiguar cómo determinar la aplicación predeterminada aquí .
Cuando inicio el proceso desde C #, utilizo el siguiente código:
ProcessStartInfo psi = new ProcessStartInfo(@"C:/MyProgram.exe");
psi.Arguments = "1";
Process p = Process.Start(psi);
¿Es posible establecer el valor de la variable global en el código VBA?
ProcessStartInfo psiMDB = new ProcessStartInfo(@"C:/MyProgram.mdb");
psiMDB.Arguments = "1";
Process p = Process.Start(psiMDB);
Si intento establecer un parámetro, tengo este error:
Necesita combinar su ruta a MS Access con su DB como parámetro.
string dbPath = @"c:/MyProgram.mdb";
string pathToAccess = @"C:/Program Files (x86)/Microsoft Office/root/Office16/MSACCESS.EXE";
ProcessStartInfo psiMDB = new ProcessStartInfo(pathToAccess);
psiMDB.Arguments = dbPath + " /cmd 1";
Process p = Process.Start(psiMDB);
Además, no olvide adjuntar /cmd
antes de colocar el siguiente parámetro.
Código de VBA adicional para leer Argumentos de inicio
Option Compare Database
Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)
Sub PrintStartupArguments()
MsgBox CmdLineToStr()
End Sub
Function CmdLineToStr() As String
Dim Buffer() As Byte
Dim StrLen As Long
Dim CmdPtr As Long
CmdPtr = GetCommandLine()
If CmdPtr > 0 Then
StrLen = lstrlenW(CmdPtr) * 2
If StrLen > 0 Then
ReDim Buffer(0 To (StrLen - 1)) As Byte
CopyMemory Buffer(0), ByVal CmdPtr, StrLen
CmdLineToStr = Buffer
End If
End If
End Function