Chạy File *.bat trong cùng Folder bằng VBA (1 người xem)

Liên hệ QC

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

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,538
Được thích
4,129
Giới tính
Nam
Mình có tập viết một Sub để chạy File temp.bat trong cùng Folder với File Excel nhưng không biết nó trật chỗ nào mà nó không chạy... Nghĩ hoài không ra... hết cách úp lên nhờ các bạn chỉ dùm
1/ trong một Folder có một File temp.bat và một File Excel thì mình mở File Excel lên chạy code thì nó sẽ mở File temp.bat lên chạy

PHP:
Public Sub Run_FileBat()
    Dim sComm As String
    sComm = ThisWorkbook.Path & "\temp.bat"
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
    'Shell sComm
    MsgBox sComm
End Sub
Xin Cảm Ơn
 
Lần chỉnh sửa cuối:
Mình có tập viết một Sub để chạy File temp.bat trong cùng Folder với File Excel nhưng không biết nó trật chỗ nào mà nó không chạy... Nghĩ hoài không ra... hết cách úp lên nhờ các bạn chỉ dùm
1/ trong một Folder có một File temp.bat và một File Excel thì mình mở File Excel lên chạy code thì nó sẽ mở File temp.bat lên chạy

PHP:
Public Sub Run_FileBat()
    Dim sComm As String
    sComm = ThisWorkbook.Path & "\temp.bat"
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
    'Shell sComm
    MsgBox sComm
End Sub
Xin Cảm Ơn

Bạn đưa file temp.bat lên đây để thí nghiệm chứ
 
Upvote 0
Má ơi! Bạn định xóa gì đó trong Registry chăng? Ai mà dám thử chứ!
Mà cái chuyện xóa gì đó trong Registry, bạn có thể viết trực tiếp trong VBA cũng được vậy! Sao phải thông qua temp.bat?
Em đang tập học code thôi Anh
Ý Tưởng
em dùng VBA tạo ra File.reg và File .bat ghi các thông tin vào đó sau đó chạy File bat để nó đăng

ký vào Registry xong thì xóa luôn hai file đó trong cùng Folder luôn cho Sạch thôi mà

Test chạy trực File temp.bat thì ok mà chạy từ code thì không được

thì Anh chỉ Em code VBA chạy File temp.bat là ok rồi

Em cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
nhưng không biết nó trật chỗ nào mà nó không chạy...
Bạn kiểm tra lại coi có phải là do trong đường dẫn có dấu cách hem.
Mã:
Const [COLOR=#0000ff]STR_DOUBLE_QUOTES [/COLOR]= """"
'
Sub Run_FileBat()
    Dim sComm As String
    sComm = [COLOR=#0000ff]STR_DOUBLE_QUOTES [/COLOR]& ThisWorkbook.Path & "\temp.bat" & [COLOR=#0000ff]STR_DOUBLE_QUOTES[/COLOR]
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
End Sub

Mình cũng hay bị lỗi này.
 
Upvote 0
Mình có tập viết một Sub để chạy File temp.bat trong cùng Folder với File Excel nhưng không biết nó trật chỗ nào mà nó không chạy... Nghĩ hoài không ra... hết cách úp lên nhờ các bạn chỉ dùm
1/ trong một Folder có một File temp.bat và một File Excel thì mình mở File Excel lên chạy code thì nó sẽ mở File temp.bat lên chạy

PHP:
Public Sub Run_FileBat()
    Dim sComm As String
    sComm = ThisWorkbook.Path & "\temp.bat"
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
    'Shell sComm
    MsgBox sComm
End Sub
Xin Cảm Ơn
Hình như mình đã viết code mẫu rồi mà, sao giờ lại còn hỏi nữa ta???
Không thể dùng lệnh Del như thế, code nó không biết đường dẫn đâu mà xóa
Trong ổ C phải tạo 1 thư mục tạm chứa file .bat. Bắt buộc phải tạo thư mục tạm, nếu không code nó ngu ngu sao ấy.
Sau đó dùng lệnh RMDIR để xóa thư mục chứa file .bat.
Tổng quát là thế này
PHP:
Sub MakeFolder()
Dim MyFolder As String
MyFolder = "C:\ABC"
With CreateObject("Wscript.Shell")
   .Run "cmd /c MKDIR """ & MyFolder & """", 0, True
End With
End Sub
Sub DelFolder()
Dim MyFolder As String
MyFolder = "C:\ABC"
With CreateObject("Wscript.Shell")
   .Run "cmd /C  RMDIR /S /Q """ & MyFolder & """", 0, True
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Má ơi! Bạn định xóa gì đó trong Registry chăng? Ai mà dám thử chứ!
Mà cái chuyện xóa gì đó trong Registry, bạn có thể viết trực tiếp trong VBA cũng được vậy! Sao phải thông qua temp.bat?
Em thấy có lúc phải chạy bằng quyền Admin mới can thiệp vào Registry anh à, cho nên có lúc cần phải chạy bằng file.dat mới được

To KieuManh
Thử code này, nếu ổn thì cho vào file .dll rồi chạy code từ Excel là được.
PHP:
Sub Test()
Dim MyFolder As String
MyFolder = "C:\ABC"
With CreateObject("Wscript.Shell")
   .Run "cmd /c MKDIR """ & MyFolder & """", 0, True
End With
Open "C:\ABC\Register.Reg" For Output As 1
Print #1, "REGEDIT4" & vbNewLine & _
"[HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _
"\Excel\Security]" & vbNewLine & """AccessVBOM""" & "=dword:00000001"
Close #1
Open "C:\ABC\temp.bat" For Output As 2
Print #2, "regedit /s C:\ABC\Register.Reg" & vbNewLine & _
"RMDIR /S /Q C:\ABC"
Close #2
Shell ("C:\ABC\temp.bat")
End Sub
 
Upvote 0
Bạn kiểm tra lại coi có phải là do trong đường dẫn có dấu cách hem.
Mã:
Const [COLOR=#0000ff]STR_DOUBLE_QUOTES [/COLOR]= """"
'
Sub Run_FileBat()
    Dim sComm As String
    sComm = [COLOR=#0000ff]STR_DOUBLE_QUOTES [/COLOR]& ThisWorkbook.Path & "\temp.bat" & [COLOR=#0000ff]STR_DOUBLE_QUOTES[/COLOR]
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
End Sub

Mình cũng hay bị lỗi này.
Không Chạy được Bạn Vẫn Vậy
 
Upvote 0
Em thấy có lúc phải chạy bằng quyền Admin mới can thiệp vào Registry anh à, cho nên có lúc cần phải chạy bằng file.dat mới được

To KieuManh
Thử code này, nếu ổn thì cho vào file .dll rồi chạy code từ Excel là được.
PHP:
Sub Test()
Dim MyFolder As String
MyFolder = "C:\ABC"
With CreateObject("Wscript.Shell")
   .Run "cmd /c MKDIR """ & MyFolder & """", 0, True
End With
Open "C:\ABC\Register.Reg" For Output As 1
Print #1, "REGEDIT4" & vbNewLine & _
"[HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _
"\Excel\Security]" & vbNewLine & """AccessVBOM""" & "=dword:00000001"
Close #1
Open "C:\ABC\temp.bat" For Output As 2
Print #2, "regedit /s C:\ABC\Register.Reg" & vbNewLine & _
"RMDIR /S /Q C:\ABC"
Close #2
Shell ("C:\ABC\temp.bat")
End Sub
Chạy tốt đó Anh....Em vừa test xong
 
Upvote 0
Hình như mình đã viết code mẫu rồi mà, sao giờ lại còn hỏi nữa ta???
Không thể dùng lệnh Del như thế, code nó không biết đường dẫn đâu mà xóa
Trong ổ C phải tạo 1 thư mục tạm chứa file .bat. Bắt buộc phải tạo thư mục tạm, nếu không code nó ngu ngu sao ấy.
Sau đó dùng lệnh RMDIR để xóa thư mục chứa file .bat.
Tổng quát là thế này
PHP:
Sub MakeFolder()
Dim MyFolder As String
MyFolder = "C:\ABC"
With CreateObject("Wscript.Shell")
   .Run "cmd /c MKDIR """ & MyFolder & """", 0, True
End With
End Sub
Sub DelFolder()
Dim MyFolder As String
MyFolder = "C:\ABC"
With CreateObject("Wscript.Shell")
   .Run "cmd /C  RMDIR /S /Q """ & MyFolder & """", 0, True
End With
End Sub
Code mẫu thì hôm trước Anh cho nó có dường dẫn rõ ràng cụ thể ...còn hôm nay em muốn biến tấu khác và làm sử dụng chương trình khác
Sao trên VB6 Em thấy làm nó đơn giản hơn VBA hay sao ấy
code VB6
PHP:
Private Sub Form_Load()
    Dim MyReg As String, Mybat As String
    MyReg = App.Path & "\Register.reg"
    Mybat = App.Path & "\temp.bat"
    Open MyReg For Output As 1
    Print #1, "REGEDIT4" & vbNewLine & _
    "[HKEY_CURRENT_USER\Software\Microsoft\Office\" & CreateObject("Excel.Application").Version & _    "\Excel\Security]" & vbNewLine & """AccessVBOM""" & "=dword:00000001"
    Print #1, "REGEDIT4" & vbNewLine & _
    "[HKEY_CURRENT_USER\Software\Microsoft\Office\" & CreateObject("Excel.Application").Version & _    "\Excel\Security]" & vbNewLine & """VBAWarnings""" & "=dword:00000002" 
    Close #1
    Open Mybat For Output As 2
    Print #2, "regedit /s Register.reg" & vbNewLine & _
    "Del Register.Reg" & vbNewLine & "Del temp.bat"
    Close #2
    Shell Mybat, vbHide
    MsgBox "Da Thuc Hien Xong", , "Kieu Manh"
    Unload Me
End Sub

Anh thử tải File chạy thử xem ..Chạy xong nó cũng Biến luôn
https://drive.google.com/file/d/0B7zWYlns0sLBa3ZTbGxYdlZ1dTQ/view?usp=sharing

Code bài 7 của Anh. Em mà chế thêm một tí nữa Thì mấy cái Ổ cứng Xanh Sạch Đẹp Luôn đó --=0
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có tập viết một Sub để chạy File temp.bat trong cùng Folder với File Excel nhưng không biết nó trật chỗ nào mà nó không chạy... Nghĩ hoài không ra... hết cách úp lên nhờ các bạn chỉ dùm
1/ trong một Folder có một File temp.bat và một File Excel thì mình mở File Excel lên chạy code thì nó sẽ mở File temp.bat lên chạy

PHP:
Public Sub Run_FileBat()
    Dim sComm As String
    sComm = ThisWorkbook.Path & "\temp.bat"
    CreateObject("Wscript.Shell").Run "cmd /c " & sComm, 0, True
    'Shell sComm
    MsgBox sComm
End Sub
Xin Cảm Ơn
Chỉ cần vậy thôi:
Mã:
Sub test()
    ChDir ThisWorkbook.Path
    Shell "temp.bat", vbHide
End Sub
 
Upvote 0
Má ơi! Bạn định xóa gì đó trong Registry chăng? Ai mà dám thử chứ!
Mà cái chuyện xóa gì đó trong Registry, bạn có thể viết trực tiếp trong VBA cũng được vậy! Sao phải thông qua temp.bat?
Thầy NDU có thể cho e xin 1 file ví dụ về cách tùy chỉnh registry trong VBA này ko ạ. E cảm ơn nhìu :)
 
Upvote 0
Web KT

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

Back
Top Bottom