VBA để thực thi tệp .bat

Liên hệ QC

bin.vcsc

Thành viên hoạt động
Tham gia
6/12/13
Bài viết
125
Được thích
14
Gửi anh chị

Mình viết lệnh thực thi Shell để thực thi tệp .bat nhưng cứ báo lỗi hoài không biết lỗi ở đâu. Mong các bạn chỉ điểm giúp

Sub RunMassEntry()

ChDir ActiveWorkbook.Path
ChDir ActiveWorkbook.Path
strProgramName = "MassEntry.bat"
Call Shell("""" & strProgramName & """", vbNormalFocus)
End Sub
 

File đính kèm

  • test lenh shell.zip
    336 bytes · Đọc: 7
ChDir là lệnh của Dos, nó sẽ ngỏm khi gặp đường dẫn (Path) là chuỗi unicode.
Vậy mình bỏ cái ChDir đi, truyền vào strProgramName là đường dẫn đầy đủ của *.bat file. Nếu vẫn không được thì dùng Short Path.

Cám ơn bác @befaint. Xin bác nói rõ hơn hoặc giúp em viết lại VBA với, vì em viết lại nhưng vẫn không chạy được ah.
 
Upvote 0
chạy file *.bat trong một số trường hợp nó đòi Run as đấy ... hãy tính tới khả năng đó
 
Upvote 0
Gửi lại đó lên đây.


Chụp cái hình xinh xinh gửi lên đây.
-----
Sao cứ nói suông vậy?
Ở trên mình cho từ khóa hết rồi, cứ chép vào Google là thấy kết quả luôn.
Em gửi lại

Sub RunMassEntry()

ActiveWorkbook.Path
ActiveWorkbook.Path
strProgramName = "C:\Users\e907pbz.TNTAD\Desktop\test\test lenh shell & MassEntry.bat"
Call Shell("""" & strProgramName & """", vbNormalFocus)

End Sub
 
Upvote 0
Em cũng có tham khảo thêm cáí này nữa mà cũng không được

Dim folderPath As String
Dim shellCommand As String

folderPath = Application.ActiveWorkbook.Path
shellCommand = """" & folderPath & "\" & "MassEntry.bat" & """"
Call Shell(shellCommand, vbNormalFocus)
 
Upvote 0
Gửi anh chị

Mình viết lệnh thực thi Shell để thực thi tệp .bat nhưng cứ báo lỗi hoài không biết lỗi ở đâu. Mong các bạn chỉ điểm giúp

Sub RunMassEntry()

ChDir ActiveWorkbook.Path
ChDir ActiveWorkbook.Path
strProgramName = "MassEntry.bat"
Call Shell("""" & strProgramName & """", vbNormalFocus)
End Sub
thử dùng hàm API kiểu như sau xem ntn
Mã:
Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
                ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Public Const SW_SHOW = 5
'________________________________________________________________________________________
Sub tst()
    ShellExecute Handle, "runas", "cmd.exe", nil, nil, SW_SHOW
End Sub
thay cụm "cmd.exe" bằng gì gì đấy
 
Upvote 0
Cái file MassEntry.bat kia có miếng cốt, miếng thịt nào đâu mà chạy được, với chạy không được.
 
Upvote 0
Em cũng có tham khảo thêm cáí này nữa mà cũng không được

Dim folderPath As String
Dim shellCommand As String

folderPath = Application.ActiveWorkbook.Path
shellCommand = """" & folderPath & "\" & "MassEntry.bat" & """"
Call Shell(shellCommand, vbNormalFocus)

Em có chỉnh lại, những vẫn còn lỗi như vậy anh xem giúp em với

1608178947167.png
 
Upvote 0
Cái file MassEntry.bat kia có miếng cốt, miếng thịt nào đâu mà chạy được, với chạy không được.
Dạ cám ơn anh em gửi nhầm tệp.
Do em tạo nháp tệp .bat nên chỉ để nội dung "aaaaaaaaaaaaaaaa" trong tệp .bat xem có thực thi được không thôi.
Em gửi lại tệp ah.
 

File đính kèm

  • test lenh shell.zip
    12.7 KB · Đọc: 8
Upvote 0
thử dùng hàm API kiểu như sau xem ntn
Mã:
Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
                ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Public Const SW_SHOW = 5
'________________________________________________________________________________________
Sub tst()
    ShellExecute Handle, "runas", "cmd.exe", nil, nil, SW_SHOW
End Sub
thay cụm "cmd.exe" bằng gì gì đấy
Gửi bạn, mình chạy thử nhưng không được ah.
 
Upvote 0
Gửi bạn, mình chạy thử nhưng không được ah.
Đưa người ta không đưa sang sông
Sao nghe tiếng sóng ở trong lòng :D
Mã:
#If VBA7 Then
    Private Declare PtrSafe Function ShellExecute _
        Lib "shell32.dll" Alias "ShellExecuteA" _
            (ByVal hwnd As LongPtr, _
             ByVal lpOperation As String, _
             ByVal lpFile As String, _
             ByVal lpParameters As String, _
             ByVal lpDirectory As String, _
             ByVal nShowCmd As Long) _
        As LongPtr
#Else
    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
#End If
Public Const SW_SHOW = 5
'________________________________________________________________________________________
Sub test()
    Dim strPath$
    ChDir ThisWorkbook.Path
    strPath = Application.GetOpenFilename()
    ShellExecute Handle, "runas", strPath, nil, nil, SW_SHOW
End Sub

Bạn chép nguyên đoạn code trên vào 1 file bất kỳ rồi chạy sub test()
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom