excel 如何在VBA中输入多行代码?

f4t66c6m  于 2022-12-05  发布在  其他
关注(0)|答案(4)|浏览(384)

我想打开一个cmd.exe,然后执行几行代码。
我在网上搜索了一些例子。
我尝试修改的代码:

strToPrint = "Hello World!"
Shell "cmd.exe /K echo " & strToPrint, vbNormalFocus

我找到了How to write message to command window from VBA?
我尝试了多行代码,但这些代码行在不同的命令窗口中执行:

Sub CMD_VBA_Script()
    Shell "cmd.exe /K echo Hello World!", vbNormalFocus
    Shell "cmd.exe /K color 0a", vbNormalFocus
End Sub

我知道当我调用Shell两次时,它将执行两次。
我的目标是从VBA调用以下脚本:

@echo off
    title Matrix
    color 0a
    mode 1000

    :a
    echo %random%%random%
    goto a

如何在命令提示符下从VBA执行多行代码?

jmo0nnb3

jmo0nnb31#

MyFile = "C:\cmdcode.bat"
fnum = FreeFile()
Open MyFile For Output As #fnum
Print #fnum, "@echo off"
Print #fnum, "title Matrix"
Print #fnum, "color 0a"
Print #fnum, "mode 1000"
Print #fnum, ""
Print #fnum, ":a"
Print #fnum, "echo %random%%random%"
Print #fnum, "goto a"
Close #fnum

' Run bat-file:
Shell MyFile, vbNormalFocus

' optional, remove bat-file:
Kill "C:\cmdcode.bat"

简而言之,你需要创建一个你运行的bat文件。如果你不需要这个bat文件,你可以用Kill删除它

1sbrub3j

1sbrub3j2#

"你可以这样写"

Call Shell("cmd.exe /c "cd C:\Users\username\local\temp\" & " && temp.vbs" & " && mkdir newfolder")

这将执行3行命令:

1.变更目录
1.执行vbs文件
1.创建新文件夹

kb5ga3dv

kb5ga3dv3#

看起来您要执行命令提示符批处理文件-批处理是有状态的,因此简单地单独执行每一行与将批处理作为一个整体执行的效果是不同的。
另外两种替代方法涉及通过指示cmd.exe的交互式示例执行某些自动化进程重新输入的命令来伪装批处理执行:要么发送窗口消息,要么通过管道进入cmd进程的stdin流。我不推荐这两种方法,因为它们固有的脆弱性(即依赖于未记录的行为)
因此,* 最佳 * 方法是按照预期执行批处理文件-您需要先将批处理写入临时文件,然后再执行它:
使用下面的代码:https://support.microsoft.com/en-us/kb/195763

Dim tempFileName As String
tempFileName = CreateTempFile("SomeBatch.cmd")

WriteToBatchFile( tempFileName ) ' you will have to write to the temp batch file yourself here

Shell "cmd.exe /c """ & tempFileName & """", vbHide, True ' Run the batch file, then cmd.exe will terminate.  The Shell function will block until cmd is closed

Kill tempFile ' delete the temp batch file
2sbarzqh

2sbarzqh4#

使用“cmd. exe/K”选项和“&”连接多个命令。
在C:\Users%USERNAME%中,使用两个简单的命令创建test.bat:

echo %PATH%
dir

下面是完整的示例:

Sub Demo_Multi_Commands()
    Cmd1 = "cd " & Environ("USERPROFILE")
    Cmd2 = "test.bat"
    Connector = " & "
    Commands = "cmd.exe /K " & Cmd1 & Connector & Cmd2 & Connector & "systeminfo"
    Debug.Print Commands
    pid = Shell(Commands, vbNormalFocus)
End Sub

使用环境:Windows 10企业版,VBA 7.1

相关问题