By executing the below code, you can run any .bat file in Excel Macro. This is very important that you should keep your Excel Sheet from which you want to execute the Batch file in “C:” drive only. It can be inside any other sub-folder but in C drive Only.
shell("c:abc.bat")
' OR
shell("CMD.EXE /c c:abc.bat")
Buy a coffee for the author
Custom Excel Formula to Count based on Color
Apr 11, 2023
Dear Readers, Last Friday, my wife, Shagun Sharma, who is a Vlogger shared an excel sheet with some data and a problem to solve, which can save some time of hers. Problem Statement: She had created an Excel sheet for her planning where she used to highlight some of…
A Complete guide to Array in Excel VBA
Aug 24, 2022
A complete guide to learning Array in Excel VBA programming. If you have done programming in any language C, VB, Java, Python, etc., you must have definitely heard and known of Array. The array is a data structure that stores data in a sequence. Each of its elements…
Difference between .Text, .Value and .Value2 in Excel VBA
Aug 10, 2022
One of you raised a question about which property should I be using to get the value of a cell or range — . Text, .Value or .Value2 Most of the time you might have seen all 3 methods being used interchangeably. Rather than answering them in a comment, I thought of…
You May Also Like…
40 Useful Excel Macro [VBA] examples – Part 1 of 2
Jun 22, 2018
Dear Friends, Here in this article, I have tried to consolidate some most useful and more frequently used excel macro…
read more
Calculate distance between two places in Excel [With Fun]
Dec 19, 2016
Dear readers, Last week, I had placed an article on how to create a static google map in excel using Google Static Map…
read more
Excel Tool : Folder Structure Creator
Nov 28, 2016
Dear readers, In my previous article I posted an article about how to create folder in windows by Excel VBA code. That…
read more
5 Comments
-
Olorus
on February 20, 2012 at 1:53 pm-
Vishwamitra Mishra
on February 20, 2012 at 2:21 pm
-
-
Tuisiong
on March 2, 2015 at 4:34 am -
Aravind
on June 30, 2016 at 9:49 pm -
Sunseekin
on March 21, 2021 at 1:19 am
This site uses Akismet to reduce spam. Learn how your comment data is processed.
How I can launch a .bat
file from excel? For example via an event or a button?
And is it possible to build a .bat
file into Excel? For example, I build a launchable .bat
file from Excel, a user downloads my Excel file from a server, and then this Excel file can launch the .bat
file?
brettdj
54.6k16 gold badges113 silver badges176 bronze badges
asked Sep 19, 2011 at 12:26
Running a bat file
To call a .bat
file from vba, you can use the shell
function:
Sub test()
Call Shell(Environ$("COMSPEC") & " /c C:Path.bat", vbNormalFocus)
End Sub
Note: the /c closes the DOS prompt when finished.
Creating a .bat file from Excel
You can create a file (a .bat
or whatever) with VBA so it could be a txt, a bat or a log file, code is seemingly the same.
Here are some links to begin with:
- create a log file
- exporting a text file from Chip Pearson
- read file
answered Sep 19, 2011 at 12:31
JMaxJMax
25.9k12 gold badges69 silver badges88 bronze badges
3
Think of the .xlsx
file as a .zip
archive. This archive houses the various XML components that build up the Excel file. Note that VBA exposes a special container to work with your custom XML code, through the CustomXMLPart
object.
I once stored thumbnails in encoded XML inside an .xlsx
file, so storing any text file such as your .bat
should be no problem at all.
This MSDN article shows you how to work with CustomXMLPart
object from VSTO. Working directly from VBA should be similar.
answered Sep 19, 2011 at 12:34
GlenoGleno
16.4k11 gold badges62 silver badges85 bronze badges
Joe4
MrExcel MVP, Junior Admin
Joe4
MrExcel MVP, Junior Admin
-
#4
Here is a good video tutorial that shows you how you can use a Sheell command to rub a bat file.
Note: I am not sure if the bat file you posted is actually what you want to do, or just a simple example of a bat file, because you can easily complete those steps in your example directly in VBA without the having to use a bat file. There are lots of examples you can find about that, if you do a simple Google Search on it. Here are a few:
Determine if directory exists, if not create it
How do I determine if a directory exists in VBA? How do I create a directory if it does not? I woould like to check the status of a local directory. If it exists, I will move along to the next process. If it does not, I would like to create the directory on the C: drive and then move along…
www.mrexcel.com
Joe4
MrExcel MVP, Junior Admin
-
#6
What I do not know is how to get a bat file to run from a macro button inside an excel xlsm file.
All buttons in Excel have VBA code attached to them — that is what they do, call/run VBA code.
So you really have two options here:
1. Have the VBA code call your batch file (Iike shown in the video linked in my last reply).
2. Have the VBA code remove the directory directly (no need to actually use VBA code do this).
There are tons of posts out there that show you how to remove directories/folders in Excel VBA directly that can be found easily with a Google Search, if you want to go with the second option and avoid using a batch file at all.
Once you have created the VBA code that you are going to use, you would simply then add a button to your worksheet, and assign your VBA code to that button.
Microsoft has a step-by-step tutorial showing you exactly how to do that here:
By the way, I would STRONGLY suggest using the simple «Form Control» button, and not the «ActiveX Control» button.
It is simpler, and has less issues.
Joe4
MrExcel MVP, Junior Admin
-
#9
I found a similar post with a similar error
In addition, I did not go to VBA University, therefore for you to suggest «Have the VBA code remove the directory directly (no need to actually use VBA code do this).» is essentially not at all helpful. I would not begin to know what to write for this VBA code.
I do not expect you to write the code yourself. You must have missed this part:
There are tons of posts out there that show you how to remove directories/folders in Excel VBA directly that can be found easily with a Google Search, if you want to go with the second option and avoid using a batch file at all.
Just Google «Excel VBA remove directories», and you will find more examples that you will know what to do with.
If you don’t want to be bothered in doing that and want someone to write the exact code you need, then you will need to explain (in plain English) exactly what you want the code to do.
Just like you did not go to «VBA University», I did not go to «Batch File University». So while I have a general sense of what your batch file does, I am not exactly sure if it is deleting all of directory G or some subset of it.
Last Updated on January 11, 2023 by
CMD Shell in VBA Excel – what it is and how to use it
In this article you will learn how to control other Windows programs from Microsoft Excel using VBA code. If you are trying to do any action in Windows using Excel, the most of these actions are used by the Windows Command Shell, called alse command line . The command line can be run simply by entering the CMD command in the Widnows Start menu. When you enter it, you’ll see the Windows command line window. Command Shell from the VBA Excel level enables:
- Running any programs from Excel, including running a macro from another Excel file.
- Controlling Windows tasks
- Managing files and directories on the disk, copying, deleting, renaming files (when you are using batch file).
- And every action you can do with the Windows command line, like start formatting your disk 🙂
In this article, we focus on the first three points.
Syntax of the Shell function in VBA Excel
How do you most easily use the Command Shell via VBA? Enter the VBA Shell function in the code and give it parameters:
'OfficeInside.Org Shell(PathName, [WindowStyle As VbAppWinStyle = vbMinimizedFocus]) As Double
PathName – The path of the file that you want to run or the name of the program.
WindowStyle – Optional argument. You can specify in which mode the program will start. Below are all the options that you can use in this param. Whether you enter in the constant argument ie. vbHide, or value = 0, is not important for the operation of the command. They are equivalent. If you don’t complete this argument, the default argument is 1, so vbNormalFocus.
Constant | Value | Description |
vbHide | 0 | The program runs in the background window. The program window is invisible. |
vbNormalFocus | 1 | The program runs in a visible window in the normal size. The window of the new program is now an active window. |
vbMinimizedFocus | 2 | The program starts in a minimized size window. The window of the new program is now an active window. |
vbMaximizedFocus | 3 | The program starts in the full-size window. The window of the new program is now an active window. |
vbNormalNoFocus | 4 | The program starts in the last used window size and the last used position on the screen. The currently used window remains active. |
vbMinimizedNoFocus | 6 | The program starts in a minimized window. The currently used window remains active. |
How to run any program from Excel VBA
Using the VBA Shell function, you can run, most of programs delivered with the Windows system, such as Paint, Notepad, etc. To do this, type the program name in quotes in the first Shell function argument:
Sub vbaShellFunction() 'OfficeInside.OrgShell ("notepad")
Shell ("mspaint")
Shell ("excel")
End Sub
If you want to run a specific file with a specific program, ie. run an Excel file with MsExcel, enter the program name in the Shell function argument, and after the spacebar the file you want to open in it:
Shell("excel d:Sheet1.xlsx")
To run any file from Excel VBA using the default program set in Windows, type the following in the function argument: explorer.exe.
Shell("explorer.exe d:Sheet1.xlsx")
In this way you opened another Excel file using Excel and VBA.
How to copy, move and delete files and directories from Excel VBA
How to use simple commands to manage data on disk? For example using VBA Excel you can:
- copy files
- delete files
- rename files
All of these activites you can do using VBA Shell function and CMD command. Remember that, after cmd command you need to type this letters: k. All examples are listed here:
Delete file using VB code:
Sub vbaShellDel()
Shell ("cmd /k delete FILE_PATHFILE_NAME.FILE_EXTENSION")
End Sub
Copy file using VB code:
Sub vbaShellCopy()'copy file
Shell("cmd /k copy C:FILE_PATHFILE_NAME.FILE_EXTENSION C:NEW_FILE_PATH")
'copy whole directory
Shell("cmd /k copy C:FILE_PATH* C:NEW_FILE_PATH")
End Sub
Rename file using VB code:
Sub vbaShellRename()
Shell ("cmd /k RENAME C:FILE_PATHFILE_NAME.FILE_EXTENSION FILE_NAME.FILE_EXTENSION")
End Sub
How to run batch file from Excel VBA?
How to do it? To use the above-mentioned commands, you should create files with the extension bat, called batch files. The bat file in its content should have the shell command ie. copy, delete or rename files. If on the other hand you would like to add parameters for commands, this is not possible from the Shell function level. Other functions of the VBA language are used for this.
How to turn off the computer in VBA Excel
To close programs and turn off the computer from MS Excel, you should create batch files with the extension bat. Below you can find code for these files:
- Computer shutdown: shutdown/s
- Computer restart: shutdown/r
- Computer hibernation: shutdown/h
Here is an example:
Sub vbaShellComputerHiber()
Shell ("cmd /k shutdown/h")
End Sub
You can download all examples here:
This article is part of the Excel vba course. The course can be found here: VBA course.
@Robert: Я попытался адаптировать ваш код с относительным путем и создал пакетный файл для запуска VBS.
VBS запускается и закрывается, но не запускает макрос… Любая идея о том, где проблема может быть?
Option Explicit
On Error Resume Next
ExcelMacroExample
Sub ExcelMacroExample()
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFilePath = objFSO.GetAbsolutePathName(".")
Set xlBook = xlApp.Workbooks.Open(strFilePath, "ExcelsCLIENTES.xlsb") , 0, True)
xlApp.Run "open_form"
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
Я удалил «Application.Quit», потому что мой макрос вызывает пользовательскую форму, заботясь об этом.
Приветствия
ИЗМЕНИТЬ
Я действительно отработал это, на всякий случай, когда кто-то хочет запустить пользовательскую форму «подобно» автономному приложению:
Проблемы, с которыми я столкнулся:
1 — Я не хотел использовать событие Workbook_Open, поскольку excel заблокирован только для чтения.
2 — Команда партии ограничена тем фактом, что (насколько мне известно) она не может вызвать макрос.
Сначала я написал макрос, чтобы запустить мою пользовательскую форму, скрывая приложение:
Sub open_form()
Application.Visible = False
frmAddClient.Show vbModeless
End Sub
Затем я создал vbs для запуска этого макроса (выполнение этого с относительным путем было сложным):
dim fso
dim curDir
dim WinScriptHost
set fso = CreateObject("Scripting.FileSystemObject")
curDir = fso.GetAbsolutePathName(".")
set fso = nothing
Set xlObj = CreateObject("Excel.application")
xlObj.Workbooks.Open curDir & "ExcelsCLIENTES.xlsb"
xlObj.Run "open_form"
И я, наконец, сделал пакетный файл для выполнения VBS…
@echo off
pushd %~dp0
cscript Add_Client.vbs
Обратите внимание, что в моем Userform_QueryClose
:
я также включил «Установить обратно в видимый»
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ThisWorkbook.Close SaveChanges:=True
Application.Visible = True
Application.Quit
End Sub
В любом случае, спасибо за вашу помощь, и я надеюсь, что это поможет, если кому-то это понадобится