Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 更改外壳程序的窗口样式_Excel_Vba_Shell - Fatal编程技术网

Excel 更改外壳程序的窗口样式

Excel 更改外壳程序的窗口样式,excel,vba,shell,Excel,Vba,Shell,在Excel VBA中,是否可以更改外壳程序的窗口样式 具体情况如下: 单击命令按钮,用户应能够加载第三方扫描程序。软件路径和文件在名为settings_scanningsoftware的命名单元格中指定,如下所示。但是,我使用的是Shell程序,它不会等到第三方软件加载后才继续。如果是的话,我的生活会更轻松。因此,我在Excel中弹出一个对话框,告诉用户等待软件加载,然后在单击“确定”之前准备好要扫描的项目。而且,由于我弹出了一个对话框,我加载了最小化的扫描程序,这样他们就可以看到这个对话框(

在Excel VBA中,是否可以更改外壳程序的窗口样式

具体情况如下:

单击命令按钮,用户应能够加载第三方扫描程序。软件路径和文件在名为settings_scanningsoftware的命名单元格中指定,如下所示。但是,我使用的是Shell程序,它不会等到第三方软件加载后才继续。如果是的话,我的生活会更轻松。因此,我在Excel中弹出一个对话框,告诉用户等待软件加载,然后在单击“确定”之前准备好要扫描的项目。而且,由于我弹出了一个对话框,我加载了最小化的扫描程序,这样他们就可以看到这个对话框(而不是把它隐藏在软件窗口后面,他们想知道为什么什么都没发生)。到目前为止和我在一起

但是,一旦他们单击Ok,我希望Excel能够控制扫描软件,并给它一个常规大小的窗口。这就是我的问题:一旦软件被加载到最小,我似乎无法改变窗口样式来给它一个常规窗口

这是我的密码:

On Error Resume Next
Dim ScannerShell As Integer
ScannerShell = Shell(Range("settings_scanningsoftware").Value, **vbMinimizedNoFocus**)
If (ScannerShell <> 0) Then
    Dim MessageBoxValue As Integer
    MessageBoxValue = MsgBox("When you're ready to scan the receipt, click Ok.", vbOKCancel, "Scan receipt")
    If (MessageBoxValue = vbOK) Then
        ScannerShell = Shell(Range("settings_scanningsoftware").Value, **vbNormal**)
        AppActivate ScannerShell, False
        SendKeys ("{TAB}{TAB}{TAB} ")
    End If
End If
出错时继续下一步
Dim ScannerShell作为整数
ScannerShell=Shell(范围(“设置\扫描软件”)。值,**vbMinimizedNoFocus**)
如果(ScannerShell 0),则
将MessageBoxValue设置为整数
MessageBoxValue=MsgBox(“当您准备好扫描收据时,请单击确定。”,vbOKCancel,“扫描收据”)
如果(MessageBoxValue=vbOK),则
ScannerShell=Shell(范围(“设置\扫描软件”)。值,**vbNormal**)
AppActivate ScannerShell,错误
发送键(“{TAB}{TAB}{TAB}”)
如果结束
如果结束
请注意,我在上面用粗体标出了vbMinimizedNoFocus,这样可以最小化软件负载,用户可以看到即将出现的对话框。一旦他们点击Ok,软件的窗口应该被规范化。但Excel不会帮我这个忙

有没有办法在加载后更改窗口样式

不要介意SendKeys命令。我把它放在那里,让扫描器在一切就绪后自动扫描(按键顺序不完整,但一次只有一个问题)。我知道SendKeys不是一种向程序发送命令的好方法,但一旦我修复了这个窗口样式的东西,我就会明白这一点


有人能帮我解决吗?谢谢。

不用
Shell
。这将启动扫描软件的新实例,而不会影响现有的实例。您可以使用WinAPI向最小化的应用程序发送消息(例如,使用
ShowWindow()
),前提是您可以获得窗口句柄(HWND)。此外,仅供参考:粗体格式在代码块内不起作用,如您所见。最好只是在您想要指出的行上方或行上添加一个常规代码注释,因为粗体操作会导致代码中出现语法错误。