Oarrasco:
Cita: cabe mencionar que si coloco un programa .exe (Notepad.Exe) lo hace sin problemas, pero con los bat no lo ejecuta.?????
Bueno, porque los exe, siempre tienen definido su directorio de trabajo. Y normalmente, toman sus referencias de las carpetas de sistema, mientras que un bat...
El archivo bat, debe tener un directorio de trabajo, es decir, una ruta desde la cual llama a los archivos o aplicaciones. Cuando tú lo ejecutas con un doble click, desde el Explorador de Windows por ejemplo, el directorio de trabajo es el directorio donde se encuentra el archivo. Pero cuando lo llamas desde VB, el directorio de trabajo es el directorio donde reside la aplicación de VB. Entonces, para que te funcione la llamada a Shell(), debes tener el bat y el exe en el mismo directorio (con las rutas del bat corregidas). Haz la prueba...
Ya que la funcionalidad de Shell() es muy limitada, si no fuera posible que el bat estuviera en el mismo directorio que el exe, puedes usar la función API ShellExecute():
Código:
'A nivel de módulo
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
'La función la lamarías así:
Call ShellExecute(0&, vbNullString, "traspaso.bat", vbNullString, "C:\", 1&)
Con esta función puedes hacer grandes maravillas, y como puedes ver a pesar de que tiene más parámetros que Shell() de VB, su sintaxis es muy sencilla.
Saludos.