VBA để thực thi tệp .bat (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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

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

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
Hóng kết quả thớt này. Có kết quả thì tự nhiên mình được hưởng thành quả thôi, kakakaka --=0
 
Upvote 0
Trên Yu-tu-be cũng có hướng dẫn nhưng mình làm vẫn không được.


Sub openBatch()
Dim file_path as string
file_path="C:\Users\test\test lenh shell\MassEntry.bat"
call shell(file_path, vbNormalFocus)
End Sub

Không biết là có phải chọn điều chỉnh gì hay chọn gì ở đây không các anh?

1608197420008.png
 
Upvote 0
Trên Yu-tu-be cũng có hướng dẫn nhưng mình làm vẫn không được.


Sub openBatch()
Dim file_path as string
file_path="C:\Users\test\test lenh shell\MassEntry.bat"
call shell(file_path, vbNormalFocus)
End Sub

Không biết là có phải chọn điều chỉnh gì hay chọn gì ở đây không các anh?

View attachment 251409
Chả chọn gì cả.
Giả sử BAT và tập tin Excel cùng tư mục. Khác thư mục thì tương tự thôi.
Mã:
Sub RunMassEntry()
Dim filename As String
    filename = """" & ThisWorkbook.Path & "\MassEntry.bat" & """"
    Shell "cmd /c " & filename, vbNormalFocus
End Sub
 
Upvote 0
Chả chọn gì cả.
Giả sử BAT và tập tin Excel cùng tư mục. Khác thư mục thì tương tự thôi.
Mã:
Sub RunMassEntry()
Dim filename As String
    filename = """" & ThisWorkbook.Path & "\MassEntry.bat" & """"
    Shell "cmd /c " & filename, vbNormalFocus
End Sub

Gửi @batman1 cám ơn bạn đã hỗ trợ.

Tập tin .BAT và tập tin Excel cùng thư mục.

Mình chạy thử nhưng báo lỗi. Bạn xem giúp mình với nha.

Error_5.JPG
 
Upvote 0
Gửi các anh chị em

Sau thời gian tìm trên mạng mình đã tìm được cách thực hiện, mình gửi để anh chị em tham khảo khi cần ah.
==========================================
Dim sfilename, fileName As String
Sub Run_bat_file()
fileName = "" & ThisWorkbook.Path & "\MassEntry.bat" & ""
VBA.Shell "Explorer.exe " & fileName, vbNormalFocus
End Sub
===========================================
 
Upvote 0

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

Back
Top Bottom